gint32 initial, gint32 max) { struct _WapiHandle_sem sem_handle = {0}; gpointer handle; int thr_ret; /* Need to blow away any old errors here, because code tests * for ERROR_ALREADY_EXISTS on success (!) to see if a * semaphore was freshly created */ SetLastError (ERROR_SUCCESS); sem_handle.val = initial; sem_handle.max = max; handle = _wapi_handle_new (WAPI_HANDLE_SEM, &sem_handle); if (handle == _WAPI_HANDLE_INVALID) { g_warning ("%s: error creating semaphore handle", __func__); SetLastError (ERROR_GEN_FAILURE); return(NULL); } thr_ret = _wapi_handle_lock_handle (handle); g_assert (thr_ret == 0); if (initial != 0) { _wapi_handle_set_signal_state (handle, TRUE, FALSE); } DEBUG ("%s: Created semaphore handle %p initial %d max %d", __func__, handle, initial, max);
static gpointer mutex_create (WapiSecurityAttributes *security G_GNUC_UNUSED, gboolean owned) { struct _WapiHandle_mutex mutex_handle = {0}; gpointer handle; int thr_ret; /* Need to blow away any old errors here, because code tests * for ERROR_ALREADY_EXISTS on success (!) to see if a mutex * was freshly created */ SetLastError (ERROR_SUCCESS); DEBUG ("%s: Creating unnamed mutex", __func__); handle = _wapi_handle_new (WAPI_HANDLE_MUTEX, &mutex_handle); if (handle == _WAPI_HANDLE_INVALID) { g_warning ("%s: error creating mutex handle", __func__); SetLastError (ERROR_GEN_FAILURE); return(NULL); } thr_ret = _wapi_handle_lock_handle (handle); g_assert (thr_ret == 0); if(owned==TRUE) { mutex_own (handle); } else { _wapi_handle_set_signal_state (handle, TRUE, FALSE); }