From dab7e575e02461bf6541c02b516a422f5a6af2b9 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Fri, 21 Nov 2003 18:22:19 +0000 Subject: [PATCH] * Replaced the two-second sleep (and associated race condition) for the session proxy to start, with a loop that attempts connection ten times a second for ten seconds, resulting in faster, more reliable startup. --- ctdlphp/ChangeLog | 6 +++++ ctdlphp/ctdlsession.php | 54 +++++++++++++++++++++-------------------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/ctdlphp/ChangeLog b/ctdlphp/ChangeLog index 9ed300cad..6155da42b 100644 --- a/ctdlphp/ChangeLog +++ b/ctdlphp/ChangeLog @@ -1,4 +1,9 @@ $Log$ + Revision 1.19 2003/11/21 18:22:19 ajc + * Replaced the two-second sleep (and associated race condition) for the + session proxy to start, with a loop that attempts connection ten times + a second for ten seconds, resulting in faster, more reliable startup. + Revision 1.18 2003/11/18 04:58:34 ajc * Added ctdlelements.php ... this is to be used for functions which fetch Citadel protocol data and convert it to insertable HTML. @@ -78,3 +83,4 @@ Revision 1.1 2003/10/31 03:47:13 ajc * Initial CVS import + diff --git a/ctdlphp/ctdlsession.php b/ctdlphp/ctdlsession.php index f2ac6f523..a12009402 100644 --- a/ctdlphp/ctdlsession.php +++ b/ctdlphp/ctdlsession.php @@ -47,40 +47,42 @@ function establish_citadel_session() { " /dev/null 2>&1 " . " 3>&1 4>&1 5>&1 6>&1 7>&1 8>&1 & " ; exec($cmd); - sleep(2); - // Ok, now try again. - $clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5); + // Keep attempting connections 10 times per second up to 100 times + $attempts = 0; + while (!$clientsocket) { + usleep(100); + $clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5); + $attempts += 1; + if ($attempts > 100) { + echo "ERROR: unable to start connection proxy. "; + echo "Please contact your system administrator.
\n"; + flush(); + exit(1); + } + } - // Try to log the user back in and go back to the correct room. - if ($clientsocket) { + // At this point we have a good connection to Citadel. - ctdl_iden(); // Identify client + ctdl_iden(); // Identify client - if ($_SESSION["username"]) { - login_existing_user( - $_SESSION["username"], - $_SESSION["password"] - ); - } - - if ($_SESSION["room"]) { - ctdl_goto($_SESSION["room"]); - } - else { - ctdl_goto("_BASEROOM_"); - } + if ($_SESSION["username"]) { + login_existing_user( + $_SESSION["username"], + $_SESSION["password"] + ); } - } - if ($clientsocket) { - if (!$_SESSION["serv_humannode"]) { - ctdl_get_serv_info(); + if ($_SESSION["room"]) { + ctdl_goto($_SESSION["room"]); + } + else { + ctdl_goto("_BASEROOM_"); } } - else { - echo "ERROR: no Citadel socket!
\n"; - flush(); + + if (!$_SESSION["serv_humannode"]) { + ctdl_get_serv_info(); } // If the user is trying to call up any page other than -- 2.30.2