MySQL 9.1.0
Source Code Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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.

Classes

class  Os_event_t
 A RAII wrapper for os_event_t. 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 non-signaled 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...
 
static void os_event_wait (os_event_t e)
 Blocking infinite wait on an event, until signalled. More...
 
ulint os_event_wait_time_low (os_event_t event, std::chrono::microseconds timeout, int64_t reset_sig_count)
 Waits for an event object until it is in the signaled state or a timeout is exceeded. More...
 
static ulint os_event_wait_time (os_event_t e, std::chrono::microseconds t)
 Blocking timed wait on an event. 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...
 

Variables

constexpr uint32_t OS_SYNC_TIME_EXCEEDED = 1
 Return value of os_event_wait_time() when the time is exceeded. More...
 

Detailed Description

The interface to the operating system condition variables.

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

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 non-signaled 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

Resets an event semaphore to the non-signaled 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().

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()

static void os_event_wait ( os_event_t  e)
inlinestatic

Blocking infinite wait on an event, until signalled.

Parameters
e- event to wait on.

◆ 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()

static ulint os_event_wait_time ( os_event_t  e,
std::chrono::microseconds  t 
)
inlinestatic

Blocking timed wait on an event.

Parameters
e- event to wait on.
t- timeout

◆ os_event_wait_time_low()

ulint os_event_wait_time_low ( os_event_t  event,
std::chrono::microseconds  timeout,
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.

Parameters
[in,out]eventEvent to wait for.
[in]timeoutTimeout, or std::chrono::microseconds::max().
[in]reset_sig_countZero or the value returned by previous call of os_event_reset().
Returns
0 if success, OS_SYNC_TIME_EXCEEDED if timeout was exceeded

Variable Documentation

◆ OS_SYNC_TIME_EXCEEDED

constexpr uint32_t OS_SYNC_TIME_EXCEEDED = 1
constexpr

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