mirror of
				https://github.com/Icinga/icinga2.git
				synced 2025-11-04 05:34:12 +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.
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
 | 
						|
 | 
						|
#include "icinga/customvarobject.hpp"
 | 
						|
#include "base/array.hpp"
 | 
						|
#impl_include "icinga/usergroup.hpp"
 | 
						|
 | 
						|
library icinga;
 | 
						|
 | 
						|
namespace icinga
 | 
						|
{
 | 
						|
 | 
						|
class User : CustomVarObject
 | 
						|
{
 | 
						|
	[config] String display_name {
 | 
						|
		get {{{
 | 
						|
			String displayName = m_DisplayName.load();
 | 
						|
			if (displayName.IsEmpty())
 | 
						|
				return GetName();
 | 
						|
			else
 | 
						|
				return displayName;
 | 
						|
		}}}
 | 
						|
	};
 | 
						|
	[config, no_user_modify, required, signal_with_old_value] array(name(UserGroup)) groups {
 | 
						|
		default {{{ return new Array(); }}}
 | 
						|
	};
 | 
						|
	[config, navigation] name(TimePeriod) period (PeriodRaw) {
 | 
						|
		navigate {{{
 | 
						|
			return TimePeriod::GetByName(GetPeriodRaw());
 | 
						|
		}}}
 | 
						|
	};
 | 
						|
 | 
						|
	[config] array(Value) types;
 | 
						|
	[no_user_view, no_user_modify] int type_filter_real (TypeFilter);
 | 
						|
	[config] array(Value) states;
 | 
						|
	[no_user_view, no_user_modify] int state_filter_real (StateFilter);
 | 
						|
 | 
						|
	[config] String email;
 | 
						|
	[config] String pager;
 | 
						|
 | 
						|
	[config] bool enable_notifications {
 | 
						|
		default {{{ return true; }}}
 | 
						|
	};
 | 
						|
 | 
						|
	[state] Timestamp last_notification;
 | 
						|
};
 | 
						|
 | 
						|
}
 |