mirror of
https://github.com/danog/ext-uv.git
synced 2024-11-26 20:14:47 +01:00
uv_lock functions: use common function
This commit is contained in:
parent
fb60200518
commit
4679654de7
398
php_uv.c
398
php_uv.c
@ -403,7 +403,6 @@ cleanup:
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline void php_uv_cb_init(php_uv_cb_t **result, php_uv_t *uv, zend_fcall_info *fci, zend_fcall_info_cache *fcc, enum php_uv_callback_type type)
|
static inline void php_uv_cb_init(php_uv_cb_t **result, php_uv_t *uv, zend_fcall_info *fci, zend_fcall_info_cache *fcc, enum php_uv_callback_type type)
|
||||||
{
|
{
|
||||||
php_uv_cb_t *cb;
|
php_uv_cb_t *cb;
|
||||||
@ -428,6 +427,188 @@ static inline void php_uv_cb_init(php_uv_cb_t **result, php_uv_t *uv, zend_fcall
|
|||||||
uv->callback[type] = cb;
|
uv->callback[type] = cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void php_uv_lock_init(enum php_uv_lock_type lock_type, INTERNAL_FUNCTION_PARAMETERS)
|
||||||
|
{
|
||||||
|
php_uv_lock_t *lock;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
switch (lock_type) {
|
||||||
|
case IS_UV_RWLOCK:
|
||||||
|
{
|
||||||
|
PHP_UV_INIT_LOCK(lock, IS_UV_RWLOCK);
|
||||||
|
error = uv_rwlock_init(PHP_UV_LOCK_RWLOCK_P(lock));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_MUTEX:
|
||||||
|
{
|
||||||
|
PHP_UV_INIT_LOCK(lock, IS_UV_MUTEX);
|
||||||
|
error = uv_mutex_init(PHP_UV_LOCK_MUTEX_P(lock));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_SEMAPHORE:
|
||||||
|
{
|
||||||
|
unsigned long val = 0;
|
||||||
|
|
||||||
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
||||||
|
"l", &val) == FAILURE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PHP_UV_INIT_LOCK(lock, IS_UV_SEMAPHORE);
|
||||||
|
error = uv_sem_init(PHP_UV_LOCK_SEM_P(lock), val);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error == 0) {
|
||||||
|
ZEND_REGISTER_RESOURCE(return_value, lock, uv_lock_handle);
|
||||||
|
} else {
|
||||||
|
efree(lock);
|
||||||
|
RETURN_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void php_uv_lock_lock(enum php_uv_lock_type lock_type, INTERNAL_FUNCTION_PARAMETERS)
|
||||||
|
{
|
||||||
|
php_uv_lock_t *lock;
|
||||||
|
zval *handle;
|
||||||
|
|
||||||
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
||||||
|
"r", &handle) == FAILURE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
||||||
|
|
||||||
|
switch (lock_type) {
|
||||||
|
case IS_UV_RWLOCK_RD:
|
||||||
|
{
|
||||||
|
uv_rwlock_rdlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
||||||
|
lock->locked = 0x01;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_RWLOCK_WR:
|
||||||
|
{
|
||||||
|
uv_rwlock_wrlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
||||||
|
lock->locked = 0x02;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_MUTEX:
|
||||||
|
{
|
||||||
|
uv_mutex_lock(PHP_UV_LOCK_MUTEX_P(lock));
|
||||||
|
lock->locked = 0x01;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_SEMAPHORE:
|
||||||
|
{
|
||||||
|
uv_sem_post(PHP_UV_LOCK_SEM_P(lock));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void php_uv_lock_unlock(enum php_uv_lock_type lock_type, INTERNAL_FUNCTION_PARAMETERS)
|
||||||
|
{
|
||||||
|
php_uv_lock_t *lock;
|
||||||
|
zval *handle;
|
||||||
|
|
||||||
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
||||||
|
"r", &handle) == FAILURE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
||||||
|
|
||||||
|
switch (lock_type) {
|
||||||
|
case IS_UV_RWLOCK_RD:
|
||||||
|
{
|
||||||
|
if (lock->locked == 0x01) {
|
||||||
|
uv_rwlock_rdunlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
||||||
|
lock->locked = 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_RWLOCK_WR:
|
||||||
|
{
|
||||||
|
if (lock->locked == 0x02) {
|
||||||
|
uv_rwlock_wrunlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
||||||
|
lock->locked = 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_MUTEX:
|
||||||
|
{
|
||||||
|
if (lock->locked == 0x01) {
|
||||||
|
uv_mutex_unlock(PHP_UV_LOCK_MUTEX_P(lock));
|
||||||
|
lock->locked = 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_SEMAPHORE:
|
||||||
|
{
|
||||||
|
uv_sem_wait(PHP_UV_LOCK_SEM_P(lock));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void php_uv_lock_trylock(enum php_uv_lock_type lock_type, INTERNAL_FUNCTION_PARAMETERS)
|
||||||
|
{
|
||||||
|
php_uv_lock_t *lock;
|
||||||
|
zval *handle;
|
||||||
|
int error = 0;
|
||||||
|
|
||||||
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
||||||
|
"r", &handle) == FAILURE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
||||||
|
|
||||||
|
switch(lock_type) {
|
||||||
|
case IS_UV_RWLOCK_RD:
|
||||||
|
{
|
||||||
|
error = uv_rwlock_tryrdlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
||||||
|
if (error == 0) {
|
||||||
|
lock->locked = 0x01;
|
||||||
|
RETURN_TRUE;
|
||||||
|
} else {
|
||||||
|
RETURN_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_RWLOCK_WR:
|
||||||
|
{
|
||||||
|
error = uv_rwlock_trywrlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
||||||
|
if (error == 0) {
|
||||||
|
lock->locked = 0x02;
|
||||||
|
RETURN_TRUE;
|
||||||
|
} else {
|
||||||
|
RETURN_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_MUTEX:
|
||||||
|
{
|
||||||
|
error = uv_mutex_trylock(PHP_UV_LOCK_MUTEX_P(lock));
|
||||||
|
|
||||||
|
if (error == 0) {
|
||||||
|
lock->locked = 0x01;
|
||||||
|
RETURN_TRUE;
|
||||||
|
} else {
|
||||||
|
RETURN_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IS_UV_SEMAPHORE:
|
||||||
|
{
|
||||||
|
error = uv_sem_trywait(PHP_UV_LOCK_SEM_P(lock));
|
||||||
|
RETURN_LONG(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* util */
|
/* util */
|
||||||
|
|
||||||
static void php_uv_ares_destroy()
|
static void php_uv_ares_destroy()
|
||||||
@ -4644,6 +4825,7 @@ PHP_FUNCTION(uv_udp_set_membership)
|
|||||||
"rssl", &client, &multicast_addr, &multicast_addr_len, &interface_addr, &interface_addr_len, &membership) == FAILURE) {
|
"rssl", &client, &multicast_addr, &multicast_addr_len, &interface_addr, &interface_addr_len, &membership) == FAILURE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(uv, php_uv_t *, &client, -1, PHP_UV_RESOURCE_NAME, uv_resource_handle);
|
ZEND_FETCH_RESOURCE(uv, php_uv_t *, &client, -1, PHP_UV_RESOURCE_NAME, uv_resource_handle);
|
||||||
PHP_UV_TYPE_CHECK(uv, IS_UV_UDP);
|
PHP_UV_TYPE_CHECK(uv, IS_UV_UDP);
|
||||||
|
|
||||||
@ -6032,18 +6214,7 @@ initialize rwlock resource
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_rwlock_init)
|
PHP_FUNCTION(uv_rwlock_init)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_init(IS_UV_RWLOCK, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
int error;
|
|
||||||
|
|
||||||
PHP_UV_INIT_LOCK(lock, IS_UV_RWLOCK);
|
|
||||||
error = uv_rwlock_init(PHP_UV_LOCK_RWLOCK_P(lock));
|
|
||||||
|
|
||||||
if (error == 0) {
|
|
||||||
ZEND_REGISTER_RESOURCE(return_value, lock, uv_lock_handle);
|
|
||||||
} else {
|
|
||||||
efree(lock);
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6066,17 +6237,7 @@ set read lock
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_rwlock_rdlock)
|
PHP_FUNCTION(uv_rwlock_rdlock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_lock(IS_UV_RWLOCK_RD, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
lock->locked = 0x01;
|
|
||||||
uv_rwlock_rdlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6089,23 +6250,7 @@ PHP_FUNCTION(uv_rwlock_rdlock)
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_rwlock_tryrdlock)
|
PHP_FUNCTION(uv_rwlock_tryrdlock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_trylock(IS_UV_RWLOCK_RD, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
int error = 0;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
error = uv_rwlock_tryrdlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
|
||||||
if (error == 0) {
|
|
||||||
lock->locked = 0x01;
|
|
||||||
RETURN_TRUE;
|
|
||||||
} else {
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6128,19 +6273,7 @@ unlock read lock
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_rwlock_rdunlock)
|
PHP_FUNCTION(uv_rwlock_rdunlock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_unlock(IS_UV_RWLOCK_RD, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
if (lock->locked == 0x01) {
|
|
||||||
uv_rwlock_rdunlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
|
||||||
lock->locked = 0x00;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6163,17 +6296,7 @@ set write lock
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_rwlock_wrlock)
|
PHP_FUNCTION(uv_rwlock_wrlock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_lock(IS_UV_RWLOCK_WR, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
lock->locked = 0x02;
|
|
||||||
uv_rwlock_wrlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6186,23 +6309,7 @@ PHP_FUNCTION(uv_rwlock_wrlock)
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_rwlock_trywrlock)
|
PHP_FUNCTION(uv_rwlock_trywrlock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_trylock(IS_UV_RWLOCK_WR, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
int error = 0;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
error = uv_rwlock_trywrlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
|
||||||
if (error == 0) {
|
|
||||||
lock->locked = 0x02;
|
|
||||||
RETURN_TRUE;
|
|
||||||
} else {
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6225,19 +6332,7 @@ unlock write lock
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_rwlock_wrunlock)
|
PHP_FUNCTION(uv_rwlock_wrunlock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_unlock(IS_UV_RWLOCK_WR, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
if (lock->locked == 0x02) {
|
|
||||||
uv_rwlock_wrunlock(PHP_UV_LOCK_RWLOCK_P(lock));
|
|
||||||
lock->locked = 0x00;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6258,17 +6353,7 @@ initialize mutex resource
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_mutex_init)
|
PHP_FUNCTION(uv_mutex_init)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *mutex;
|
php_uv_lock_init(IS_UV_MUTEX, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
int error;
|
|
||||||
|
|
||||||
PHP_UV_INIT_LOCK(mutex, IS_UV_MUTEX);
|
|
||||||
error = uv_mutex_init(PHP_UV_LOCK_MUTEX_P(mutex));
|
|
||||||
if (error == 0) {
|
|
||||||
ZEND_REGISTER_RESOURCE(return_value, mutex, uv_lock_handle);
|
|
||||||
} else {
|
|
||||||
efree(mutex);
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6291,17 +6376,7 @@ lock mutex
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_mutex_lock)
|
PHP_FUNCTION(uv_mutex_lock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *mutex;
|
php_uv_lock_lock(IS_UV_MUTEX, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(mutex, php_uv_lock_t*, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
uv_mutex_lock(PHP_UV_LOCK_MUTEX_P(mutex));
|
|
||||||
mutex->locked = 0x01;
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6314,24 +6389,7 @@ PHP_FUNCTION(uv_mutex_lock)
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_mutex_trylock)
|
PHP_FUNCTION(uv_mutex_trylock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *mutex;
|
php_uv_lock_trylock(IS_UV_MUTEX, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
int error = 0;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(mutex, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
error = uv_mutex_trylock(PHP_UV_LOCK_MUTEX_P(mutex));
|
|
||||||
|
|
||||||
if (error == 0) {
|
|
||||||
mutex->locked = 0x01;
|
|
||||||
RETURN_TRUE;
|
|
||||||
} else {
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6354,23 +6412,11 @@ unlock mutex
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_mutex_unlock)
|
PHP_FUNCTION(uv_mutex_unlock)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *mutex;
|
php_uv_lock_unlock(IS_UV_MUTEX, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(mutex, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
if (mutex->locked == 0x01) {
|
|
||||||
uv_mutex_unlock(PHP_UV_LOCK_MUTEX_P(mutex));
|
|
||||||
mutex->locked = 0x00;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ proto uv_lock uv_sem_init(void)
|
/* {{{ proto uv_lock uv_sem_init(long $value)
|
||||||
|
|
||||||
##### *Description*
|
##### *Description*
|
||||||
|
|
||||||
@ -6387,24 +6433,7 @@ initialize semaphore resource
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_sem_init)
|
PHP_FUNCTION(uv_sem_init)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *semaphore;
|
php_uv_lock_init(IS_UV_SEMAPHORE, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
int error = 0;
|
|
||||||
unsigned long val = 0;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"l", &val) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PHP_UV_INIT_LOCK(semaphore, IS_UV_SEMAPHORE);
|
|
||||||
error = uv_sem_init(PHP_UV_LOCK_SEM_P(semaphore), val);
|
|
||||||
|
|
||||||
if (error == 0) {
|
|
||||||
ZEND_REGISTER_RESOURCE(return_value, semaphore, uv_lock_handle);
|
|
||||||
} else {
|
|
||||||
efree(semaphore);
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6427,16 +6456,7 @@ post semaphore
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_sem_post)
|
PHP_FUNCTION(uv_sem_post)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_lock(IS_UV_SEMAPHORE, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
uv_sem_post(PHP_UV_LOCK_SEM_P(lock));
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6449,16 +6469,7 @@ PHP_FUNCTION(uv_sem_post)
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_sem_wait)
|
PHP_FUNCTION(uv_sem_wait)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_unlock(IS_UV_SEMAPHORE, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
uv_sem_wait(PHP_UV_LOCK_SEM_P(lock));
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
@ -6471,18 +6482,7 @@ PHP_FUNCTION(uv_sem_wait)
|
|||||||
*/
|
*/
|
||||||
PHP_FUNCTION(uv_sem_trywait)
|
PHP_FUNCTION(uv_sem_trywait)
|
||||||
{
|
{
|
||||||
php_uv_lock_t *lock;
|
php_uv_lock_trylock(IS_UV_SEMAPHORE, INTERNAL_FUNCTION_PARAM_PASSTHRU);
|
||||||
zval *handle;
|
|
||||||
int error = 0;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
||||||
"z", &handle) == FAILURE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZEND_FETCH_RESOURCE(lock, php_uv_lock_t *, &handle, -1, PHP_UV_LOCK_RESOURCE_NAME, uv_lock_handle);
|
|
||||||
error = uv_sem_trywait(PHP_UV_LOCK_SEM_P(lock));
|
|
||||||
RETURN_LONG(error);
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
6
php_uv.h
6
php_uv.h
@ -52,8 +52,10 @@ extern zend_class_entry *uv_class_entry;
|
|||||||
|
|
||||||
enum php_uv_lock_type{
|
enum php_uv_lock_type{
|
||||||
IS_UV_RWLOCK = 1,
|
IS_UV_RWLOCK = 1,
|
||||||
IS_UV_MUTEX = 2,
|
IS_UV_RWLOCK_RD = 2,
|
||||||
IS_UV_SEMAPHORE = 3,
|
IS_UV_RWLOCK_WR = 3,
|
||||||
|
IS_UV_MUTEX = 4,
|
||||||
|
IS_UV_SEMAPHORE = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum php_uv_resource_type{
|
enum php_uv_resource_type{
|
||||||
|
Loading…
Reference in New Issue
Block a user