mirror of
				https://github.com/isar/libmdbx.git
				synced 2025-10-31 03:29:01 +08:00 
			
		
		
		
	mdbx: fix mdbx_env_set_option() for dp_initial & dp_limit.
				
					
				
			Fixes https://github.com/erthink/libmdbx/issues/179 Change-Id: I925104a45148112e0ce94a069a7468e2b4fc8209
This commit is contained in:
		
							
								
								
									
										20
									
								
								src/core.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/core.c
									
									
									
									
									
								
							| @@ -21032,28 +21032,18 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option, | ||||
|     if (env->me_txn) | ||||
|       err = MDBX_EPERM /* unable change during transaction */; | ||||
|     else { | ||||
|       mdbx_dpl_clear(env->me_txn0->tw.dirtylist); | ||||
|       const unsigned value32 = (unsigned)value; | ||||
|       const pgno_t value32 = (pgno_t)value; | ||||
|       if (option == MDBX_opt_txn_dp_initial && | ||||
|           env->me_options.dp_initial != value32) { | ||||
|         env->me_options.dp_initial = value32; | ||||
|         if (env->me_options.dp_limit < value32) | ||||
|           env->me_options.dp_limit = value32; | ||||
|         if (env->me_txn0->tw.dirtylist->detent < value32 && | ||||
|             !mdbx_dpl_reserve(env->me_txn0, value32)) | ||||
|           err = MDBX_ENOMEM; | ||||
|         else | ||||
|           env->me_options.dp_initial = value32; | ||||
|       } | ||||
|       if (option == MDBX_opt_txn_dp_limit && | ||||
|           env->me_options.dp_limit != value32) { | ||||
|         if (env->me_txn0->tw.dirtylist->detent > value32 && | ||||
|             !mdbx_dpl_reserve(env->me_txn0, value32)) | ||||
|           err = MDBX_ENOMEM; | ||||
|         else { | ||||
|           if (env->me_options.dp_initial > value32) | ||||
|             env->me_options.dp_initial = value32; | ||||
|           env->me_options.dp_limit = value32; | ||||
|         } | ||||
|         env->me_options.dp_limit = value32; | ||||
|         if (env->me_options.dp_initial > value32) | ||||
|           env->me_options.dp_initial = value32; | ||||
|       } | ||||
|     } | ||||
|     break; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user