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