sas             Wed Dec  4 04:53:20 2002 EDT

  Modified files:              
    /php4/ext/ircg      ircg.c php_ircg_private.h 
  Log:
  Delay put_irconn call for set_current until we actually finish
  using the conn structure.
  
  This just passed a test with 25M messages delivered and 45K logins
  handled in an Apache 1.3 context.
  
  
Index: php4/ext/ircg/ircg.c
diff -u php4/ext/ircg/ircg.c:1.153 php4/ext/ircg/ircg.c:1.154
--- php4/ext/ircg/ircg.c:1.153  Tue Dec  3 19:19:51 2002
+++ php4/ext/ircg/ircg.c        Wed Dec  4 04:53:20 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: ircg.c,v 1.153 2002/12/04 00:19:51 sas Exp $ */
+/* $Id: ircg.c,v 1.154 2002/12/04 09:53:20 sas Exp $ */
 
 /* {{{ includes */
 
@@ -1060,6 +1060,7 @@
 {
        zval **p1;
        php_irconn_t *conn;
+       int do_put = 1;
 
        if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &p1) == FAILURE)
                WRONG_PARAM_COUNT;
@@ -1099,13 +1100,18 @@
                        if (irc_write_buf_add(&conn->wb, conn->fd) == 0) {
                                php_ircg->irc_set_currents++;
                                IRCGG(flush_data) = conn;
+                               /* We maintain a reference to conn until rshutdown */
+                               do_put = 0;
                                RETVAL_TRUE;
                        } else {
+                               php_ircg->failed_set_currents++;
+                               conn->fd = -1;
                                RETVAL_FALSE;
                        }
                }
        }
-       put_irconn(conn);
+       if (do_put)
+               put_irconn(conn);
 }
 /* }}} */
 
@@ -2076,6 +2082,7 @@
 
                msg_replay_buffer(conn);
                irc_write_buf_flush(&conn->wb);
+               put_irconn(conn);
        }
 
        return SUCCESS;
@@ -2213,6 +2220,8 @@
        php_info_print_table_row(2, "Terminated IRC connections", buf);
        sprintf(buf, "%lu", php_ircg->irc_set_currents);
        php_info_print_table_row(2, "Persistent HTTP connections", buf);
+       sprintf(buf, "%lu", php_ircg->failed_set_currents);
+       php_info_print_table_row(2, "Failed persistent HTTP connections", buf);
        sprintf(buf, "%lu", php_ircg->irc_wbuf_destructs);
        php_info_print_table_row(2, "Write buffer destructs", buf);
        php_info_print_table_end();
Index: php4/ext/ircg/php_ircg_private.h
diff -u php4/ext/ircg/php_ircg_private.h:1.3 php4/ext/ircg/php_ircg_private.h:1.4
--- php4/ext/ircg/php_ircg_private.h:1.3        Tue Dec  3 16:50:12 2002
+++ php4/ext/ircg/php_ircg_private.h    Wed Dec  4 04:53:20 2002
@@ -30,7 +30,7 @@
        /* these just serve statistical/entertainment purposes */
        unsigned long irc_connects, irc_set_currents, irc_quit_handlers, 
                        exec_fmt_msgs, exec_token_compiler,
-                       irc_wbuf_destructs;
+                       irc_wbuf_destructs, failed_set_currents;
 
        unsigned long cache_hits, cache_misses;
 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to