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

Reply via email to