mirror of
				https://github.com/bspeice/qadapt
				synced 2025-10-31 01:20:36 -04:00 
			
		
		
		
	Warning message if guards without allocator enabled
This commit is contained in:
		| @ -19,7 +19,11 @@ maintenance = { status = "actively-developed" } | ||||
|  | ||||
| [dependencies] | ||||
| libc = "0.2" | ||||
| log = "0.4" | ||||
| spin = "0.4" | ||||
| thread-id = "3.3" | ||||
|  | ||||
| qadapt-macro = { version = "0.7.0", path = "./qadapt-macro" } | ||||
| qadapt-macro = { version = "0.7.0", path = "./qadapt-macro" } | ||||
|  | ||||
| [dev-dependencies] | ||||
| env_logger = "0.6" | ||||
| @ -14,6 +14,7 @@ fn does_allocate() -> Box<u8> { | ||||
| fn main() { | ||||
|     // If you were to run `cargo run --example release_mode`, this program blows up. | ||||
|     // If, however, you ran `cargo run --release --example release_mode`, | ||||
|     // nothing interesting will happen. | ||||
|     // nothing interesting will happen since panic-related code is stripped | ||||
|     // for release builds. | ||||
|     does_allocate(); | ||||
| } | ||||
|  | ||||
							
								
								
									
										21
									
								
								examples/setup_warning.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								examples/setup_warning.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| extern crate env_logger; | ||||
| extern crate qadapt; | ||||
|  | ||||
| use qadapt::allocate_panic; | ||||
|  | ||||
| // Note that we're missing the `#[global_allocator]` attribute | ||||
|  | ||||
| #[allocate_panic] | ||||
| fn does_allocate() -> Box<u8> { | ||||
|     Box::new(0) | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
|     // This code will warn that QADAPT isn't being used, but won't trigger a panic. | ||||
|     // Run with `RUST_LOG=warn cargo run --example setup_warning` | ||||
|     env_logger::init(); | ||||
|     does_allocate(); | ||||
|  | ||||
|     // The warning will only trigger once though | ||||
|     does_allocate(); | ||||
| } | ||||
							
								
								
									
										12
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/lib.rs
									
									
									
									
									
								
							| @ -12,6 +12,8 @@ | ||||
| //! for some helper macros to make working with QADAPT a bit easier. | ||||
| #![deny(missing_docs)] | ||||
| extern crate libc; | ||||
| #[macro_use] | ||||
| extern crate log; | ||||
| extern crate qadapt_macro; | ||||
| extern crate spin; | ||||
| // thread_id is necessary because `std::thread::current()` panics if we have not yet | ||||
| @ -45,6 +47,11 @@ pub fn enter_protected() { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if *IS_ACTIVE.read() == false { | ||||
|             *IS_ACTIVE.write() = true; | ||||
|             warn!("QADAPT not initialized when using allocation guards; please verify `#[global_allocator]` is set!"); | ||||
|         } | ||||
|  | ||||
|         PROTECTION_LEVEL | ||||
|             .try_with(|v| { | ||||
|                 *v.write() += 1; | ||||
| @ -76,6 +83,7 @@ pub fn exit_protected() { | ||||
|     } | ||||
| } | ||||
|  | ||||
| static IS_ACTIVE: RwLock<bool> = RwLock::new(false); | ||||
| static INTERNAL_ALLOCATION: RwLock<usize> = RwLock::new(usize::max_value()); | ||||
|  | ||||
| /// Get the current "protection level" in QADAPT: calls to enter_protected() - exit_protected() | ||||
| @ -115,6 +123,10 @@ fn alloc_immediate() -> bool { | ||||
|  | ||||
| unsafe impl GlobalAlloc for QADAPT { | ||||
|     unsafe fn alloc(&self, layout: Layout) -> *mut u8 { | ||||
|         if *IS_ACTIVE.read() == false { | ||||
|             *IS_ACTIVE.write() = true; | ||||
|         } | ||||
|  | ||||
|         // If we're attempting to allocate our PROTECTION_LEVEL thread local, | ||||
|         // just allow it through | ||||
|         if alloc_immediate() { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user