mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Bug#25042 OPTIMIZE TABLE cause race condition in IO CACHE SHARE
- The condition variable implementation "lost" a signal to WaitOnSingleObject when a semaphore was released. - The signal could be consumed by a new call to pthread_cond_wait before all waiting threads had awoken. - The new implementation of pthread_cond_* uses events instead of semaphores. It also uses an extra lock to protect entry into new cond wait before the broadcast has finished. include/my_pthread.h: - New implementatin of pthread_cond_init. This version uses events instead of semaphores mysys/my_wincond.c: - New implementatin of pthread_cond_init. This version uses events instead of semaphores
This commit is contained in:
@@ -80,11 +80,17 @@ typedef struct st_pthread_link {
|
||||
|
||||
typedef struct {
|
||||
uint32 waiting;
|
||||
#ifdef OS2
|
||||
HEV semaphore;
|
||||
#else
|
||||
HANDLE semaphore;
|
||||
#endif
|
||||
CRITICAL_SECTION lock_waiting;
|
||||
|
||||
enum {
|
||||
SIGNAL= 0,
|
||||
BROADCAST= 1,
|
||||
MAX_EVENTS= 2
|
||||
} EVENTS;
|
||||
|
||||
HANDLE events[MAX_EVENTS];
|
||||
HANDLE broadcast_block_event;
|
||||
|
||||
} pthread_cond_t;
|
||||
|
||||
typedef int pthread_mutexattr_t;
|
||||
|
Reference in New Issue
Block a user