MySQL  8.0.21
Source Code Documentation
os0event.h File Reference

The interface to the operating system condition variables. More...

#include <sys/types.h>
#include "univ.i"
#include "os0event.ic"

Go to the source code of this file.

Macros

#define OS_SYNC_INFINITE_TIME   ULINT_UNDEFINED
 Denotes an infinite delay for os_event_wait_time() More...
 
#define OS_SYNC_TIME_EXCEEDED   1
 Return value of os_event_wait_time() when the time is exceeded. More...
 
#define os_event_wait(e)   os_event_wait_low((e), 0)
 Blocking infinite wait on an event, until signealled. More...
 
#define os_event_wait_time(e, t)   os_event_wait_time_low((e), (t), 0)
 Blocking timed wait on an event. More...
 

Typedefs

typedef struct os_eventos_event_t
 

Functions

os_event_t os_event_create ()
 Creates an event semaphore, i.e., a semaphore which may just have two states: signaled and nonsignaled. More...
 
void os_event_set (os_event_t event)
 Sets an event semaphore to the signaled state: lets waiting threads proceed. More...
 
bool os_event_try_set (os_event_t event)
 
bool os_event_is_set (const os_event_t event)
 Check if the event is set. More...
 
int64_t os_event_reset (os_event_t event)
 Resets an event semaphore to the nonsignaled state. More...
 
void os_event_destroy (os_event_t &event)
 Frees an event object. More...
 
void os_event_wait_low (os_event_t event, int64_t reset_sig_count)
 Waits for an event object until it is in the signaled state. More...
 
ulint os_event_wait_time_low (os_event_t event, ulint time_in_usec, int64_t reset_sig_count)
 Waits for an event object until it is in the signaled state or a timeout is exceeded. More...
 
void os_event_global_init (void)
 Initializes support for os_event objects. More...
 
void os_event_global_destroy (void)
 Deinitializes support for os_event objects. More...
 

Detailed Description

The interface to the operating system condition variables.

Created 2012-09-23 Sunny Bains (split from os0sync.h)

Macro Definition Documentation

◆ os_event_wait

#define os_event_wait (   e)    os_event_wait_low((e), 0)

Blocking infinite wait on an event, until signealled.

Parameters
e- event to wait on.

◆ os_event_wait_time

#define os_event_wait_time (   e,
 
)    os_event_wait_time_low((e), (t), 0)

Blocking timed wait on an event.

Parameters
e- event to wait on.
t- timeout in microseconds

◆ OS_SYNC_INFINITE_TIME

#define OS_SYNC_INFINITE_TIME   ULINT_UNDEFINED

Denotes an infinite delay for os_event_wait_time()

◆ OS_SYNC_TIME_EXCEEDED

#define OS_SYNC_TIME_EXCEEDED   1

Return value of os_event_wait_time() when the time is exceeded.

Typedef Documentation

◆ os_event_t

typedef struct os_event* os_event_t

Function Documentation

◆ os_event_create()

os_event_t os_event_create ( )

Creates an event semaphore, i.e., a semaphore which may just have two states: signaled and nonsignaled.

The created event is manual reset: it must be reset explicitly by calling os_event_reset().

Returns
the event handle

The created event is manual reset: it must be reset explicitly by calling sync_os_reset_event.

Returns
the event handle

On SuSE Linux we get spurious EBUSY from pthread_mutex_destroy() unless we grab and release the mutex here. Current OS version: openSUSE Leap 15.0 Linux xxx 4.12.14-lp150.12.25-default #1 SMP Thu Nov 1 06:14:23 UTC 2018 (3fcf457) x86_64 x86_64 x86_64 GNU/Linux

◆ os_event_destroy()

void os_event_destroy ( os_event_t event)

Frees an event object.

in/own: event to free

Parameters
eventin/own: event to free

◆ os_event_global_destroy()

void os_event_global_destroy ( void  )

Deinitializes support for os_event objects.

Must be called once, and after all os_event objects are destroyed. After it is called, no new os_event is allowed to be created.

◆ os_event_global_init()

void os_event_global_init ( void  )

Initializes support for os_event objects.

Must be called once, and before any os_event object is created.

◆ os_event_is_set()

bool os_event_is_set ( const os_event_t  event)

Check if the event is set.

Returns
true if set in: event to set
true if set
Parameters
eventin: event to test

◆ os_event_reset()

int64_t os_event_reset ( os_event_t  event)

Resets an event semaphore to the nonsignaled state.

Waiting threads will stop to wait for the event. The return value should be passed to os_even_wait_low() if it is desired that this thread should not wait in case of an intervening call to os_event_set() between this os_event_reset() and the os_event_wait_low() call. See comments for os_event_wait_low(). in/out: event to reset

Waiting threads will stop to wait for the event. The return value should be passed to os_even_wait_low() if it is desired that this thread should not wait in case of an intervening call to os_event_set() between this os_event_reset() and the os_event_wait_low() call. See comments for os_event_wait_low().

Returns
current signal_count.
Parameters
eventin/out: event to reset

◆ os_event_set()

void os_event_set ( os_event_t  event)

Sets an event semaphore to the signaled state: lets waiting threads proceed.

in/out: event to set

Parameters
eventin/out: event to set

◆ os_event_try_set()

bool os_event_try_set ( os_event_t  event)

◆ os_event_wait_low()

void os_event_wait_low ( os_event_t  event,
int64_t  reset_sig_count 
)

Waits for an event object until it is in the signaled state.

Typically, if the event has been signalled after the os_event_reset() we'll return immediately because event->is_set == TRUE. There are, however, situations (e.g.: sync_array code) where we may lose this information. For example:

thread A calls os_event_reset() thread B calls os_event_set() [event->is_set == TRUE] thread C calls os_event_reset() [event->is_set == FALSE] thread A calls os_event_wait() [infinite wait!] thread C calls os_event_wait() [infinite wait!]

Where such a scenario is possible, to avoid infinite wait, the value returned by os_event_reset() should be passed in as reset_sig_count. in: zero or the value returned by previous call of os_event_reset().

Where such a scenario is possible, to avoid infinite wait, the value returned by os_event_reset() should be passed in as reset_sig_count.

Parameters
eventin: event to wait
reset_sig_countin: zero or the value returned by previous call of os_event_reset().

◆ os_event_wait_time_low()

ulint os_event_wait_time_low ( os_event_t  event,
ulint  time_in_usec,
int64_t  reset_sig_count 
)

Waits for an event object until it is in the signaled state or a timeout is exceeded.

In Unix the timeout is always infinite.

Returns
0 if success, OS_SYNC_TIME_EXCEEDED if timeout was exceeded in: zero or the value returned by previous call of os_event_reset().
0 if success, OS_SYNC_TIME_EXCEEDED if timeout was exceeded
Parameters
eventin/out: event to wait
time_in_usecin: timeout in microseconds, or OS_SYNC_INFINITE_TIME
reset_sig_countin: zero or the value returned by previous call of os_event_reset().