thread/Posix{Mutex,Cond}: use "constexpr" only with glibc
Apparently all other C libraries are not compatible with "constexpr". Those which are not will get a performance penalty, but at least they work at all.
This commit is contained in:
		
							
								
								
									
										1
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,4 +1,5 @@ | ||||
| ver 0.19.14 (not yet released) | ||||
| * fix build failures on non-glibc builds due to constexpr Mutex | ||||
|  | ||||
| ver 0.19.13 (2016/02/23) | ||||
| * tags | ||||
|   | ||||
| @@ -41,9 +41,13 @@ class PosixCond { | ||||
| 	pthread_cond_t cond; | ||||
|  | ||||
| public: | ||||
| #if defined(__NetBSD__) || defined(__BIONIC__) | ||||
| 	/* NetBSD's PTHREAD_COND_INITIALIZER is not compatible with | ||||
| 	   "constexpr" */ | ||||
| #ifdef __GLIBC__ | ||||
| 	/* optimized constexpr constructor for pthread implementations | ||||
| 	   that support it */ | ||||
| 	constexpr PosixCond():cond(PTHREAD_COND_INITIALIZER) {} | ||||
| #else | ||||
| 	/* slow fallback for pthread implementations that are not | ||||
| 	   compatible with "constexpr" */ | ||||
| 	PosixCond() { | ||||
| 		pthread_cond_init(&cond, nullptr); | ||||
| 	} | ||||
| @@ -51,10 +55,6 @@ public: | ||||
| 	~PosixCond() { | ||||
| 		pthread_cond_destroy(&cond); | ||||
| 	} | ||||
| #else | ||||
| 	/* optimized constexpr constructor for sane POSIX | ||||
| 	   implementations */ | ||||
| 	constexpr PosixCond():cond(PTHREAD_COND_INITIALIZER) {} | ||||
| #endif | ||||
|  | ||||
| 	PosixCond(const PosixCond &other) = delete; | ||||
|   | ||||
| @@ -41,9 +41,13 @@ class PosixMutex { | ||||
| 	pthread_mutex_t mutex; | ||||
|  | ||||
| public: | ||||
| #if defined(__NetBSD__) || defined(__BIONIC__) | ||||
| 	/* NetBSD's PTHREAD_MUTEX_INITIALIZER is not compatible with | ||||
| 	   "constexpr" */ | ||||
| #ifdef __GLIBC__ | ||||
| 	/* optimized constexpr constructor for pthread implementations | ||||
| 	   that support it */ | ||||
| 	constexpr PosixMutex():mutex(PTHREAD_MUTEX_INITIALIZER) {} | ||||
| #else | ||||
| 	/* slow fallback for pthread implementations that are not | ||||
| 	   compatible with "constexpr" */ | ||||
| 	PosixMutex() { | ||||
| 		pthread_mutex_init(&mutex, nullptr); | ||||
| 	} | ||||
| @@ -51,10 +55,6 @@ public: | ||||
| 	~PosixMutex() { | ||||
| 		pthread_mutex_destroy(&mutex); | ||||
| 	} | ||||
| #else | ||||
| 	/* optimized constexpr constructor for sane POSIX | ||||
| 	   implementations */ | ||||
| 	constexpr PosixMutex():mutex(PTHREAD_MUTEX_INITIALIZER) {} | ||||
| #endif | ||||
|  | ||||
| 	PosixMutex(const PosixMutex &other) = delete; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann