mirror of
				https://git.tukaani.org/xz.git
				synced 2025-11-04 07:22:55 +00:00 
			
		
		
		
	xz: Make filter_memusages a local variable
This commit is contained in:
		
							parent
							
								
									347b412a93
								
							
						
					
					
						commit
						87011e40c1
					
				@ -49,12 +49,6 @@ static lzma_filter filters[NUM_FILTER_CHAIN_MAX][LZMA_FILTERS_MAX + 1];
 | 
				
			|||||||
/// default filter chain.
 | 
					/// default filter chain.
 | 
				
			||||||
static uint32_t filters_used_mask = 1;
 | 
					static uint32_t filters_used_mask = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef HAVE_ENCODERS
 | 
					 | 
				
			||||||
/// Track the memory usage for all filter chains (default or --filtersX).
 | 
					 | 
				
			||||||
/// The memory usage may need to be scaled down depending on the memory limit.
 | 
					 | 
				
			||||||
static uint64_t filter_memusages[ARRAY_SIZE(filters)];
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/// Input and output buffers
 | 
					/// Input and output buffers
 | 
				
			||||||
static io_buf in_buf;
 | 
					static io_buf in_buf;
 | 
				
			||||||
static io_buf out_buf;
 | 
					static io_buf out_buf;
 | 
				
			||||||
@ -250,7 +244,8 @@ validate_block_list_filter(const uint32_t filter_num)
 | 
				
			|||||||
// Calculate the memory usage of each filter chain.
 | 
					// Calculate the memory usage of each filter chain.
 | 
				
			||||||
// Return the maximum memory usage of all of the filter chains.
 | 
					// Return the maximum memory usage of all of the filter chains.
 | 
				
			||||||
static uint64_t
 | 
					static uint64_t
 | 
				
			||||||
filters_memusage_max(const lzma_mt *mt, bool encode)
 | 
					filters_memusage_max(uint64_t *filter_memusages,
 | 
				
			||||||
 | 
							const lzma_mt *mt, bool encode)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint64_t max_memusage = 0;
 | 
						uint64_t max_memusage = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -273,12 +268,10 @@ filters_memusage_max(const lzma_mt *mt, bool encode)
 | 
				
			|||||||
		if (mt != NULL) {
 | 
							if (mt != NULL) {
 | 
				
			||||||
			mt_local.filters = filters[i];
 | 
								mt_local.filters = filters[i];
 | 
				
			||||||
			memusage = lzma_stream_encoder_mt_memusage(&mt_local);
 | 
								memusage = lzma_stream_encoder_mt_memusage(&mt_local);
 | 
				
			||||||
			filter_memusages[i] = memusage;
 | 
					 | 
				
			||||||
		} else
 | 
							} else
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		if (encode) {
 | 
							if (encode) {
 | 
				
			||||||
			memusage = lzma_raw_encoder_memusage(filters[i]);
 | 
								memusage = lzma_raw_encoder_memusage(filters[i]);
 | 
				
			||||||
			filter_memusages[i] = memusage;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#ifdef HAVE_DECODERS
 | 
					#ifdef HAVE_DECODERS
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
@ -286,6 +279,9 @@ filters_memusage_max(const lzma_mt *mt, bool encode)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (filter_memusages != NULL)
 | 
				
			||||||
 | 
								filter_memusages[i] = memusage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (memusage > max_memusage)
 | 
							if (memusage > max_memusage)
 | 
				
			||||||
			max_memusage = memusage;
 | 
								max_memusage = memusage;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -456,6 +452,14 @@ coder_set_compression_settings(void)
 | 
				
			|||||||
	// will be replaced.
 | 
						// will be replaced.
 | 
				
			||||||
	uint64_t memory_limit = hardware_memlimit_get(opt_mode);
 | 
						uint64_t memory_limit = hardware_memlimit_get(opt_mode);
 | 
				
			||||||
	uint64_t memory_usage = UINT64_MAX;
 | 
						uint64_t memory_usage = UINT64_MAX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_ENCODERS
 | 
				
			||||||
 | 
						// Memory usage for each encoder filter chain (default
 | 
				
			||||||
 | 
						// or --filtersX). The encoder options may need to be
 | 
				
			||||||
 | 
						// scaled down depending on the memory usage limit.
 | 
				
			||||||
 | 
						uint64_t filter_memusages[ARRAY_SIZE(filters)];
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (opt_mode == MODE_COMPRESS) {
 | 
						if (opt_mode == MODE_COMPRESS) {
 | 
				
			||||||
#ifdef HAVE_ENCODERS
 | 
					#ifdef HAVE_ENCODERS
 | 
				
			||||||
#	ifdef MYTHREAD_ENABLED
 | 
					#	ifdef MYTHREAD_ENABLED
 | 
				
			||||||
@ -505,7 +509,7 @@ coder_set_compression_settings(void)
 | 
				
			|||||||
			mt_options.block_size = block_size;
 | 
								mt_options.block_size = block_size;
 | 
				
			||||||
			mt_options.check = check;
 | 
								mt_options.check = check;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			memory_usage = filters_memusage_max(
 | 
								memory_usage = filters_memusage_max(filter_memusages,
 | 
				
			||||||
						&mt_options, true);
 | 
											&mt_options, true);
 | 
				
			||||||
			if (memory_usage != UINT64_MAX)
 | 
								if (memory_usage != UINT64_MAX)
 | 
				
			||||||
				message(V_DEBUG, _("Using up to %" PRIu32
 | 
									message(V_DEBUG, _("Using up to %" PRIu32
 | 
				
			||||||
@ -514,7 +518,8 @@ coder_set_compression_settings(void)
 | 
				
			|||||||
		} else
 | 
							} else
 | 
				
			||||||
#	endif
 | 
					#	endif
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			memory_usage = filters_memusage_max(NULL, true);
 | 
								memory_usage = filters_memusage_max(filter_memusages,
 | 
				
			||||||
 | 
										NULL, true);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
@ -535,7 +540,8 @@ coder_set_compression_settings(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS)
 | 
					#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS)
 | 
				
			||||||
	if (opt_mode == MODE_COMPRESS && message_verbosity_get() >= V_DEBUG) {
 | 
						if (opt_mode == MODE_COMPRESS && message_verbosity_get() >= V_DEBUG) {
 | 
				
			||||||
		const uint64_t decmem = filters_memusage_max(NULL, false);
 | 
							const uint64_t decmem = filters_memusage_max(
 | 
				
			||||||
 | 
									NULL, NULL, false);
 | 
				
			||||||
		if (decmem != UINT64_MAX)
 | 
							if (decmem != UINT64_MAX)
 | 
				
			||||||
			message(V_DEBUG, _("Decompression will need "
 | 
								message(V_DEBUG, _("Decompression will need "
 | 
				
			||||||
					"%s MiB of memory."), uint64_to_str(
 | 
										"%s MiB of memory."), uint64_to_str(
 | 
				
			||||||
@ -562,7 +568,7 @@ coder_set_compression_settings(void)
 | 
				
			|||||||
			// Reduce the number of threads by one and check
 | 
								// Reduce the number of threads by one and check
 | 
				
			||||||
			// the memory usage.
 | 
								// the memory usage.
 | 
				
			||||||
			--mt_options.threads;
 | 
								--mt_options.threads;
 | 
				
			||||||
			memory_usage = filters_memusage_max(
 | 
								memory_usage = filters_memusage_max(filter_memusages,
 | 
				
			||||||
					&mt_options, true);
 | 
										&mt_options, true);
 | 
				
			||||||
			if (memory_usage == UINT64_MAX)
 | 
								if (memory_usage == UINT64_MAX)
 | 
				
			||||||
				message_bug();
 | 
									message_bug();
 | 
				
			||||||
@ -625,7 +631,8 @@ coder_set_compression_settings(void)
 | 
				
			|||||||
		// the multithreaded mode but the output
 | 
							// the multithreaded mode but the output
 | 
				
			||||||
		// is also different.
 | 
							// is also different.
 | 
				
			||||||
		hardware_threads_set(1);
 | 
							hardware_threads_set(1);
 | 
				
			||||||
		memory_usage = filters_memusage_max(NULL, true);
 | 
							memory_usage = filters_memusage_max(filter_memusages,
 | 
				
			||||||
 | 
									NULL, true);
 | 
				
			||||||
		message(V_WARNING, _("Switching to single-threaded mode "
 | 
							message(V_WARNING, _("Switching to single-threaded mode "
 | 
				
			||||||
			"to not exceed the memory usage limit of %s MiB"),
 | 
								"to not exceed the memory usage limit of %s MiB"),
 | 
				
			||||||
			uint64_to_str(round_up_to_mib(memory_limit), 0));
 | 
								uint64_to_str(round_up_to_mib(memory_limit), 0));
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user