GLib.Once

Fields

Name

Type

Access

Description

retval

object

r/w

the value returned by the call to the function, if status is GLib.OnceStatus.READY

status

GLib.OnceStatus

r/w

the status of the GLib.Once

Methods

class

init_enter (location)

class

init_enter_impl (location)

class

init_enter_pointer (location)

class

init_leave (location, result)

class

init_leave_pointer (location, result)

Details

class GLib.Once

A GLib.Once struct controls a one-time initialization function. Any one-time initialization function must have its own unique GLib.Once struct.

New in version 2.4.

classmethod init_enter(location)[source]
Parameters:

location (object) – location of a static initializable variable containing 0

Returns:

True if the initialization section should be entered, False and blocks otherwise

location:

location of a static initializable variable containing 0

Return type:

(bool, location: object)

Function to be called when starting a critical initialization section. The argument location must point to a static 0-initialized variable that will be set to a value other than 0 at the end of the initialization section. In combination with GLib.Once.init_leave() and the unique address value_location, it can be ensured that an initialization section will be executed only once during a program’s life time, and that concurrent threads are blocked until initialization completed. To be used in constructs like this:

static gsize initialization_value = 0;

if (g_once_init_enter (&initialization_value))
  {
    gsize setup_value = 42; // initialization code here

    g_once_init_leave (&initialization_value, setup_value);
  }

// use initialization_value here

While location has a volatile qualifier, this is a historical artifact and the pointer passed to it should not be volatile.

New in version 2.14.

classmethod init_enter_impl(location)[source]
Parameters:

location (int) –

Return type:

bool

classmethod init_enter_pointer(location)[source]
Parameters:

location (object) – location of a static initializable variable containing NULL

Returns:

True if the initialization section should be entered, False and blocks otherwise

Return type:

bool

This functions behaves in the same way as GLib.Once.init_enter(), but can can be used to initialize pointers (or #guintptr) instead of #gsize.

static MyStruct *interesting_struct = NULL;

if (g_once_init_enter_pointer (&interesting_struct))
  {
    MyStruct *setup_value = allocate_my_struct (); // initialization code here

    g_once_init_leave_pointer (&interesting_struct, g_steal_pointer (&setup_value));
  }

// use interesting_struct here

New in version 2.80.

classmethod init_leave(location, result)[source]
Parameters:
  • location (object) – location of a static initializable variable containing 0

  • result (int) – new non-0 value for value_location

Returns:

location of a static initializable variable containing 0

Return type:

location: object

Counterpart to GLib.Once.init_enter(). Expects a location of a static 0-initialized initialization variable, and an initialization value other than 0. Sets the variable to the initialization value, and releases concurrent threads blocking in GLib.Once.init_enter() on this initialization variable.

While location has a volatile qualifier, this is a historical artifact and the pointer passed to it should not be volatile.

New in version 2.14.

classmethod init_leave_pointer(location, result)[source]
Parameters:
  • location (object) – location of a static initializable variable containing NULL

  • result (object or None) – new non-NULL value for *location

Counterpart to GLib.Once.init_enter_pointer(). Expects a location of a static NULL-initialized initialization variable, and an initialization value other than NULL. Sets the variable to the initialization value, and releases concurrent threads blocking in GLib.Once.init_enter_pointer() on this initialization variable.

This functions behaves in the same way as GLib.Once.init_leave(), but can be used to initialize pointers (or #guintptr) instead of #gsize.

New in version 2.80.