diff options
author | Antony Dovgal <tony2001@php.net> | 2005-02-07 13:30:45 +0000 |
---|---|---|
committer | Antony Dovgal <tony2001@php.net> | 2005-02-07 13:30:45 +0000 |
commit | 96610aee0875c8e979559d8490951d28a9ec01b7 (patch) | |
tree | 0ca55c0a3d48a25719e154591f5735f80c51ed02 | |
parent | 066d1b4d530d969fea641fed4a381d5b499341e0 (diff) | |
download | php-git-96610aee0875c8e979559d8490951d28a9ec01b7.tar.gz |
fix leaks on shutdown
fix leaks appearing when trying to open several "databases"
-rw-r--r-- | ext/filepro/filepro.c | 44 | ||||
-rw-r--r-- | ext/filepro/php_filepro.h | 2 |
2 files changed, 45 insertions, 1 deletions
diff --git a/ext/filepro/filepro.c b/ext/filepro/filepro.c index 2821c9aa16..737a1e0c0d 100644 --- a/ext/filepro/filepro.c +++ b/ext/filepro/filepro.c @@ -96,11 +96,43 @@ PHP_MINIT_FUNCTION(filepro) fp_globals = (fp_global_struct *) LocalAlloc(LPTR, sizeof(fp_global_struct)); TlsSetValue(FPTls, (void *) fp_globals); #endif + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_RINIT_FUNCTION + */ +PHP_RINIT_FUNCTION(filepro) +{ FP_GLOBAL(fp_database)=NULL; FP_GLOBAL(fp_fcount)=-1; FP_GLOBAL(fp_keysize)=-1; FP_GLOBAL(fp_fieldlist)=NULL; + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_RSHUTDOWN_FUNCTION + */ +PHP_RSHUTDOWN_FUNCTION(filepro) +{ + FP_FIELD *tmp, *next; + if (FP_GLOBAL(fp_database)) { + efree(FP_GLOBAL(fp_database)); + } + + if (FP_GLOBAL(fp_fieldlist)) { + for (tmp = FP_GLOBAL(fp_fieldlist); tmp;) { + efree(tmp->name); + efree(tmp->format); + next = tmp->next; + efree(tmp); + tmp=next; + } + } return SUCCESS; } /* }}} */ @@ -143,7 +175,15 @@ function_entry filepro_functions[] = { zend_module_entry filepro_module_entry = { STANDARD_MODULE_HEADER, - "filepro", filepro_functions, PHP_MINIT(filepro), PHP_MSHUTDOWN(filepro), NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES + "filepro", + filepro_functions, + PHP_MINIT(filepro), + PHP_MSHUTDOWN(filepro), + PHP_RINIT(filepro), + PHP_RSHUTDOWN(filepro), + NULL, + NO_VERSION_YET, + STANDARD_MODULE_PROPERTIES }; @@ -214,6 +254,8 @@ PHP_FUNCTION(filepro) tmp = FP_GLOBAL(fp_fieldlist); while (tmp != NULL) { next = tmp->next; + efree(tmp->name); + efree(tmp->format); efree(tmp); tmp = next; } diff --git a/ext/filepro/php_filepro.h b/ext/filepro/php_filepro.h index 31a72c4641..85ff69b605 100644 --- a/ext/filepro/php_filepro.h +++ b/ext/filepro/php_filepro.h @@ -41,6 +41,8 @@ PHP_FUNCTION(filepro_fieldcount); PHP_FUNCTION(filepro_retrieve); PHP_MINIT_FUNCTION(filepro); +PHP_RINIT_FUNCTION(filepro); +PHP_RSHUTDOWN_FUNCTION(filepro); PHP_MSHUTDOWN_FUNCTION(filepro); #else #define phpext_filepro_ptr NULL |