mirror of
				https://github.com/Icinga/icinga2.git
				synced 2025-10-31 19:24:25 +01:00 
			
		
		
		
	Apparently there was a reason for making the members of generated classes atomic. However, this was only done for some types, others were still accessed using non-atomic operations. For members of type T::Ptr (i.e. intrusive_ptr<T>), this can result in a double free when multiple threads access the same variable and at least one of them writes to the variable. This commit makes use of std::atomic<T> for more T (it removes the additional constraint sizeof(T) <= sizeof(void*)) and uses a type including a mutex for load and store operations as a fallback.
		
			
				
	
	
		
			29 lines
		
	
	
		
			493 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			493 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
 | |
| 
 | |
| #include "icinga/customvarobject.hpp"
 | |
| 
 | |
| library icinga;
 | |
| 
 | |
| namespace icinga
 | |
| {
 | |
| 
 | |
| class ServiceGroup : CustomVarObject
 | |
| {
 | |
| 	[config] String display_name {
 | |
| 		get {{{
 | |
| 			String displayName = m_DisplayName.load();
 | |
| 			if (displayName.IsEmpty())
 | |
| 				return GetName();
 | |
| 			else
 | |
| 				return displayName;
 | |
| 		}}}
 | |
| 	};
 | |
| 
 | |
| 	[config, no_user_modify] array(name(ServiceGroup)) groups;
 | |
| 	[config] String notes;
 | |
| 	[config] String notes_url;
 | |
| 	[config] String action_url;
 | |
| };
 | |
| 
 | |
| }
 |