cvs: php4 /ext/sysvsem sysvsem.c

From: Date: Fri, 27 Sep 2002 10:24:55 +0000
Subject: cvs: php4 /ext/sysvsem sysvsem.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-14279@lists.php.net to get a copy of this message
wez Fri Sep 27 06:24:55 2002 EDT Modified files: /php4/ext/sysvsem sysvsem.c Log: Really *really* fix the segfault bug #17274 and bug #19627 this time. @ - Fixed bugs #17274 and #19627 (segfault in sem_remove). (Wez) Index: php4/ext/sysvsem/sysvsem.c diff -u php4/ext/sysvsem/sysvsem.c:1.40 php4/ext/sysvsem/sysvsem.c:1.41 --- php4/ext/sysvsem/sysvsem.c:1.40 Fri May 17 08:33:49 2002 +++ php4/ext/sysvsem/sysvsem.c Fri Sep 27 06:24:54 2002 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: sysvsem.c,v 1.40 2002/05/17 12:33:49 wez Exp $ */ +/* $Id: sysvsem.c,v 1.41 2002/09/27 10:24:54 wez Exp $ */ /* Latest update build anc tested on Linux 2.2.14 * @@ -114,6 +114,7 @@ */ if(sem_ptr->count == -1 || !sem_ptr->auto_release) { + efree(sem_ptr); return; } /* Decrement the usage count. */ @@ -272,10 +273,7 @@ sem_ptr->count = 0; sem_ptr->auto_release = auto_release; - Z_LVAL_P(return_value) = zend_list_insert(sem_ptr, php_sysvsem_module.le_sem); - Z_TYPE_P(return_value) = IS_LONG; - - sem_ptr->id = (int)Z_LVAL_P(return_value); + sem_ptr->id = ZEND_REGISTER_RESOURCE(return_value, sem_ptr, php_sysvsem_module.le_sem); } /* }}} */ @@ -284,7 +282,6 @@ static void php_sysvsem_semop(INTERNAL_FUNCTION_PARAMETERS, int acquire) { pval **arg_id; - int id, type; sysvsem_sem *sem_ptr; struct sembuf sop; @@ -293,22 +290,16 @@ if (zend_get_parameters_ex(1, &arg_id)==FAILURE) { RETURN_FALSE; } - convert_to_long_ex(arg_id); - id = (int)Z_LVAL_PP(arg_id); break; default: WRONG_PARAM_COUNT; break; } - sem_ptr = (sysvsem_sem *) zend_list_find(id, &type); - if (type!=php_sysvsem_module.le_sem) { - php_error(E_WARNING, "%d is not a SysV semaphore index", id); - RETURN_FALSE; - } + ZEND_FETCH_RESOURCE(sem_ptr, sysvsem_sem *, arg_id, -1, "SysV semphore", php_sysvsem_module.le_sem); if (!acquire && sem_ptr->count == 0) { - php_error(E_WARNING, "SysV semaphore index %d (key 0x%x) is not currently acquired", id, sem_ptr->key); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "SysV semaphore %d (key 0x%x) is not currently acquired", Z_LVAL_PP(arg_id), sem_ptr->key); RETURN_FALSE; } @@ -356,7 +347,6 @@ PHP_FUNCTION(sem_remove) { pval **arg_id; - int id,type; sysvsem_sem *sem_ptr; #if HAVE_SEMUN union semun un; @@ -366,33 +356,25 @@ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_id) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long_ex(arg_id); - - id = Z_LVAL_PP(arg_id); - sem_ptr = (sysvsem_sem *) zend_list_find(id, &type); - - if (type!=php_sysvsem_module.le_sem) { - php_error(E_WARNING, "%d is not a SysV semaphore index", id); - RETURN_FALSE; - } + ZEND_FETCH_RESOURCE(sem_ptr, sysvsem_sem *, arg_id, -1, "SysV semphore", php_sysvsem_module.le_sem); #if HAVE_SEMUN un.buf = &buf; - if(semctl(sem_ptr->semid, 0, IPC_STAT, &un) < 0) { + if(semctl(sem_ptr->semid, 0, IPC_STAT, un) < 0) { #else if(semctl(sem_ptr->semid, 0, IPC_STAT, NULL) < 0) { #endif - php_error(E_WARNING, "%d is not a existing SysV Semaphore Id", id); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "SysV semphore %d does not (any longer) exist", Z_LVAL_PP(arg_id)); RETURN_FALSE; } #if HAVE_SEMUN - if(semctl(sem_ptr->semid, 0, IPC_RMID, &un) < 0) { + if(semctl(sem_ptr->semid, 0, IPC_RMID, un) < 0) { #else if(semctl(sem_ptr->semid, 0, IPC_RMID, NULL) < 0) { #endif - php_error(E_WARNING, "sem_remove() failed for id %d: %s", id, strerror(errno)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for SysV sempphore %d: %s", Z_LVAL_PP(arg_id), strerror(errno)); RETURN_FALSE; }

« previous php.cvs (#14279) next »