1
0
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:
unknown
2007-02-15 14:08:21 +01:00
parent e5c1656e97
commit 448f6003f9
2 changed files with 122 additions and 43 deletions

View File

@@ -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;