dickmeiss Fri Oct 24 15:32:08 2003 EDT Modified files: /php-src/ext/yaz php_yaz.c php_yaz.h Log: For YAZ, RSHUTDOWN closes persistent connections that have been idle more than yaz.keepalive seconds. Default value for config yaz.keepalive is 120 seconds. The shutdown prevents many sockets in CLOSE_WAIT state. Index: php-src/ext/yaz/php_yaz.c diff -u php-src/ext/yaz/php_yaz.c:1.80 php-src/ext/yaz/php_yaz.c:1.81 --- php-src/ext/yaz/php_yaz.c:1.80 Sun Aug 31 08:41:53 2003 +++ php-src/ext/yaz/php_yaz.c Fri Oct 24 15:32:06 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_yaz.c,v 1.80 2003/08/31 12:41:53 zeev Exp $ */ +/* $Id: php_yaz.c,v 1.81 2003/10/24 19:32:06 dickmeiss Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -48,7 +48,7 @@ #include <yaz/yaz-ccl.h> #include <yaz/zoom.h> -#define MAX_ASSOC 100 +#define MAX_ASSOC 200 typedef struct Yaz_AssociationInfo *Yaz_Association; @@ -63,6 +63,7 @@ int in_use; int order; int zval_resource; + long time_stamp; }; static Yaz_Association yaz_association_mk() @@ -81,6 +82,7 @@ p->persistent = 0; p->ccl_parser = ccl_parser_create(); p->ccl_parser->bibset = 0; + p->time_stamp = 0; return p; } @@ -374,7 +376,7 @@ as->in_use = 1; as->persistent = persistent; as->order = YAZSG(assoc_seq); - + as->time_stamp = time(0); #ifdef ZTS tsrm_mutex_unlock (yaz_mutex); #endif @@ -1484,6 +1486,11 @@ #else STD_PHP_INI_ENTRY("yaz.max_links", "100", PHP_INI_ALL, OnUpdateInt, max_links, zend_yaz_globals, yaz_globals) #endif +#if PHP_MAJOR_VERSION >= 5 + STD_PHP_INI_ENTRY("yaz.keepalive", "120", PHP_INI_ALL, OnUpdateLong, keepalive, zend_yaz_globals, yaz_globals) +#else + STD_PHP_INI_ENTRY("yaz.keepalive", "120", PHP_INI_ALL, OnUpdateInt, keepalive, zend_yaz_globals, yaz_globals) +#endif STD_PHP_INI_ENTRY("yaz.log_file", NULL, PHP_INI_ALL, OnUpdateString, log_file, zend_yaz_globals, yaz_globals) PHP_INI_END() /* }}} */ @@ -1566,6 +1573,31 @@ PHP_RSHUTDOWN_FUNCTION(yaz) { + long now = time(0); + int i; + + yaz_log(LOG_LOG, "rshutdown keepalive=%ld", YAZSG(keepalive)); +#ifdef ZTS + tsrm_mutex_lock(yaz_mutex); +#endif + for (i = 0; i < YAZSG(max_links); i++) { + Yaz_Association *as = shared_associations + i; + if (*as) + { + if (now - (*as)->time_stamp > YAZSG(keepalive)) + { + const char *host = option_get(*as, "host"); + if (host) + yaz_log(LOG_LOG, "shutdown of %s", host); + + yaz_association_destroy(*as); + *as = 0; + } + } + } +#ifdef ZTS + tsrm_mutex_unlock(yaz_mutex); +#endif return SUCCESS; } Index: php-src/ext/yaz/php_yaz.h diff -u php-src/ext/yaz/php_yaz.h:1.18 php-src/ext/yaz/php_yaz.h:1.19 --- php-src/ext/yaz/php_yaz.h:1.18 Tue Jun 10 16:03:40 2003 +++ php-src/ext/yaz/php_yaz.h Fri Oct 24 15:32:06 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_yaz.h,v 1.18 2003/06/10 20:03:40 imajes Exp $ */ +/* $Id: php_yaz.h,v 1.19 2003/10/24 19:32:06 dickmeiss Exp $ */ #ifndef PHP_YAZ_H #define PHP_YAZ_H @@ -58,6 +58,7 @@ ZEND_BEGIN_MODULE_GLOBALS(yaz) int assoc_seq; long max_links; + long keepalive; char *log_file; ZEND_END_MODULE_GLOBALS(yaz)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php