X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=f0e412b4ba502d94d2448d5593bdd71472e9c7d1;hb=6c5739418252ed58e037c78dc88171fee448d776;hp=7a608caeef6df9b130fefbf8d3e40d3d8e08dc95;hpb=b871e931e395202bee5513df99ba82a4a085b33b;p=brisk.git diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index 7a608ca..f0e412b 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -57,6 +57,7 @@ define(BAN_TIME, 3600); define(GARBAGE_TIMEOUT, 10); define(NICKSERV, "BriskServ"); +define(LOCK_SHARE_MAX, 10000); define(DBG_ONL2, 0x0001); define(DBG_ONLY, 0x0002); @@ -70,7 +71,8 @@ define(DBG_LOAD, 0x0100); define(DBG_AUTH, 0x0200); define(DBG_CRIT, 0x0400); define(DBG_LMOP, 0x0800); - +define(DBG_TRAC, 0x1000); +define(DBG_SHME, 0x2000); // NOTE: BRISK DEBUG must be a numerical constant, not the result of operations on symbols define(BRISK_DEBUG, 0xffffffbf); @@ -134,12 +136,12 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', $G_lng = langtolng($G_lang); $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 ); -$G_brisk_version = "3.4.3"; +$G_brisk_version = "3.5.6"; /* MLANG: ALL THE INFO STRINGS IN brisk.phh */ -$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': versione di test per la nuova gestione dei dati volatili, rivista gestione del ticker.', +$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': (tecnica) utilizzo di locking tipo lettori/scrittori al posto del locking esclusivo generico.', 'Se vuoi iscriverti alla Mailing List, cliccala!' ), - 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: test version for the new volatile data management, ticker management refactored.', + 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: usage of reader/writer locking instead of generic exclusive locking.', 'If you want to subscribe our Mailing List, click it!' ) ); $G_room_help = array( 'it' => ' @@ -282,6 +284,70 @@ Copyright 2006-2009 Matteo Nasta
version '.$G_brisk_version.'

Copyright 2006-2009
Matteo Nastasi (aka mop)

'); +function mop_flush() +{ + ob_flush(); + flush(); +} + +function file_lock($fname, $is_exclusive) +{ + if (($res = fopen($fname, "r+")) == FALSE) { + return (FALSE); + } + + if (flock($res, ($is_exclusive ? LOCK_EX : LOCK_SH)) == FALSE) { + fclose($res); + return (FALSE); + } + + return ($res); +} + +function file_unlock($res) +{ + if ($res != FALSE) { + flock($res, LOCK_UN); + fclose($res); + } +} + +function webservers_exceeded() +{ + return(file_exists(PROXY_PATH."/webservers_exceded.flag")); +} + +function webservers_check() +{ + GLOBAL $G_webserver_max; + + /* FIXME: check all procs expirations */ + return (10); + + $ct = 0; + + $dh = opendir('/proc'); + while (($file = readdir($dh)) !== false) { + if (preg_match('/[0-9]+/', $file)) { + $cmdline = explode("\0", file_get_contents('/proc/'.$file.'/cmdline')); + // echo "xxx".$cmdline[0].$n; + if (strstr('/usr/sbin/apache2', $cmdline[0]) != FALSE) { + // echo "yyy".$cmdline[0].$n; + $ct++; + } + } + } + closedir($dh); + + if ($ct >= $G_webserver_max) { + touch(PROXY_PATH."/webservers_exceded.flag"); + } + else { + unlink(PROXY_PATH."/webservers_exceded.flag"); + } + return ($ct); +} + $escinp_from = array( "\"" ); $escinp_to = array( """ ); @@ -363,6 +429,23 @@ function xcapemesg($s) } +class Vect { + function Vect($a) + { + $this->el = $a; + } + + function getbyid($idx) + { + return ($this->el[$idx]); + } + + function setbyid($idx, $v) + { + $this->el[$idx] = $v; + } +} + class Table { var $idx; var $player; @@ -385,7 +468,7 @@ class Table { function create($idx) { - if (($thiz =& new Table()) == FALSE) + if (($thiz = new Table()) == FALSE) return (FALSE); $thiz->idx = $idx; @@ -429,7 +512,7 @@ class Table { function myclone($from) { - if (($thiz =& new Table()) == FALSE) + if (($thiz = new Table()) == FALSE) return (FALSE); $this->copy($from); @@ -439,7 +522,7 @@ class Table { function spawn($from) { - if (($thiz =& new Table()) == FALSE) + if (($thiz = new Table()) == FALSE) return (FALSE); $thiz->idx = $from->idx; @@ -499,7 +582,7 @@ class Table { return ($this->player_n - 1); } - function user_rem(&$room, &$user) + function user_rem($room, $user) { $tabpos = $user->table_pos; @@ -509,7 +592,7 @@ class Table { /* aggiorna l'array dei giocatori al tavolo. */ for ($i = $tabpos ; $i < $this->player_n-1 ; $i++) { $this->player[$i] = $this->player[$i+1]; - $user_cur = &$room->user[$this->player[$i]]; + $user_cur = $room->user[$this->player[$i]]; $user_cur->table_pos = $i; } $this->player_n--; @@ -525,7 +608,7 @@ class Table { // ($this->table[$i]->auth_only == FALSE ? TRUE : $user->flags & USER_FLAG_AUTH)); // function act_content($isstanding, $sitted, $table, $cur_table, $allowed) - function act_content(&$user) + function act_content($user) { $ret = ""; $isstanding = ($user->subst == 'standup'); @@ -599,7 +682,8 @@ define(USER_FLAG_TY_SUSPEND, 0x400000); // done define(USER_FLAG_TY_DISABLE, 0x800000); // done class User { - var $idx; // index in the users array + var $idx; // index in the users array when you are in game + var $idx_orig; // index in the users array when you aren't in game var $code; // authentication code var $name; // name of the user var $sess; // session of the user @@ -619,8 +703,8 @@ class User { // FIXME: the table_orig field must be removed after table field verify of index management (in spawned table // it is allways ZERO - var $table_orig; // id of the current table (if in table state) - var $table; // id of the current table (if in table state) + var $table; // id of the current table when you are in game + var $table_orig; // id of the current table when you aren't in game var $table_pos; // idx on the table var $table_token;// token that identify a game on a table var $flags; // Bitfield with: AUTHENTICATE: 0x02 @@ -637,41 +721,40 @@ class User { } function create($idx, $name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") { - // error_log("User::create BEGIN", 0); - - if (($thiz =& new User()) == FALSE) + if (($thiz = new User()) == FALSE) return (FALSE); - $thiz->idx = $idx; - $thiz->code = -1; - $thiz->name = $name; - $thiz->sess = $sess; - $thiz->ip = $ip; - $thiz->lacc = time(); - $thiz->laccwr = time(); - $thiz->bantime = 0; - $thiz->stat = $stat; - $thiz->subst = $subst; - $thiz->step = 1; - $thiz->trans_step = -1; - $thiz->comm = array(); - $thiz->asta_card = -2; - $thiz->asta_pnt = -1; - $thiz->handpt = -1; + $thiz->idx = $idx; + $thiz->idx_orig = $idx; + $thiz->code = -1; + $thiz->name = $name; + $thiz->sess = $sess; + $thiz->ip = $ip; + $thiz->lacc = time(); + $thiz->laccwr = time(); + $thiz->bantime = 0; + $thiz->stat = $stat; + $thiz->subst = $subst; + $thiz->step = 1; + $thiz->trans_step = -1; + $thiz->comm = array(); + $thiz->asta_card = -2; + $thiz->asta_pnt = -1; + $thiz->handpt = -1; $thiz->exitislock = TRUE; - $thiz->flags = 0x00; + $thiz->flags = 0x00; - $thiz->chattime = array_fill(0, CHAT_N, 0); - $thiz->chat_cur = 0; - $thiz->chat_lst = ""; - $thiz->chat_ban = 0; - $thiz->chat_dlt = 0; + $thiz->chattime = array_fill(0, CHAT_N, 0); + $thiz->chat_cur = 0; + $thiz->chat_lst = ""; + $thiz->chat_ban = 0; + $thiz->chat_dlt = 0; $thiz->table_orig = $table; $thiz->table = $table; - $thiz->table_pos = -1; - $thiz->table_token = ""; + $thiz->table_pos = -1; + $thiz->table_token= ""; $thiz->shm_sz = SHM_DIMS_U_MIN; return ($thiz); } @@ -679,6 +762,7 @@ class User { function copy($from) { $this->idx = $from->idx; + $this->idx_orig = $from->idx; $this->code = $from->code; $this->name = $from->name; $this->sess = $from->sess; @@ -704,15 +788,15 @@ class User { $this->handpt = $from->handpt; $this->exitislock = $from->exitislock; - $this->flags = $from->flags; + $this->flags = $from->flags; - $this->chattime = array(); + $this->chattime = array(); for ($i = 0 ; $i < CHAT_N ; $i++) $this->chattime[$i] = $from->chattime[$i]; - $this->chat_cur = $from->chat_cur; - $this->chat_lst = $from->chat_lst; - $this->chat_ban = $from->chat_ban; - $this->chat_dlt = $from->chat_dlt; + $this->chat_cur = $from->chat_cur; + $this->chat_lst = $from->chat_lst; + $this->chat_ban = $from->chat_ban; + $this->chat_dlt = $from->chat_dlt; $this->table_orig = $from->table_orig; $this->table = $from->table; @@ -726,7 +810,7 @@ class User { function myclone($from) { - if (($thiz =& new User()) == FALSE) + if (($thiz = new User()) == FALSE) return (FALSE); $thiz->copy($from); @@ -736,10 +820,11 @@ class User { function spawn($from, $table, $table_pos) { - if (($thiz =& new User()) == FALSE) + if (($thiz = new User()) == FALSE) return (FALSE); $thiz->idx = $from->idx; + $thiz->idx_orig = $from->idx; $thiz->code = $from->code; $thiz->name = $from->name; $thiz->sess = $from->sess; @@ -800,7 +885,7 @@ class User { /* if (validate_sess($this->sess)) { if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); + mkdir(PROXY_PATH, 0775, TRUE); $fp = fopen(PROXY_PATH."/".$this->sess.".stat", 'w'); fwrite($fp, sprintf("%s\n",$this->stat)); fclose($fp); @@ -812,16 +897,29 @@ class User { { $this->step = $step & 0x7fffffff; + return (TRUE); + } + + function step_inc($delta = 1) { + $this->step += $delta; + /* modularization because unpack() not manage unsigned 32bit int correctly */ + $this->step &= 0x7fffffff; + + return TRUE; + } + + function save_step() + { do { if (validate_sess($this->sess) == FALSE) break; if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); + mkdir(PROXY_PATH, 0775, TRUE); if (($fp = @fopen(PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE) break; fwrite($fp, pack("LL",$this->step, $this->idx)); fclose($fp); - + log_main("step_set [".$this->sess. "] [".$this->step."]"); return (TRUE); @@ -830,33 +928,50 @@ class User { return (FALSE); } - function step_inc($delta = 1) { - $this->step += $delta; - /* modularization because unpack() not manage unsigned 32bit int correctly */ - $this->step &= 0x7fffffff; - - if (validate_sess($this->sess)) { + static function load_step($sess) + { + $fp = FALSE; + do { + if (validate_sess($sess) == FALSE) + break; + if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - $fp = fopen(PROXY_PATH."/".$this->sess.".step", 'w'); - fwrite($fp, pack("LL", $this->step, $this->idx)); + mkdir(PROXY_PATH, 0775, TRUE); + if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE) + break; + if (($s = fread($fp, 8)) == FALSE) + break; + if (mb_strlen($s, "ASCII") != 8) + break; + $arr = unpack('Ls/Li', $s); fclose($fp); - - log_main("step_inc [".$this->sess. "] [".$this->step."]"); - return (TRUE); - } + // log_rd2("A0: ".$arr[0]." A1: ".$arr[1]); + return ($arr); + } while (0); + + if ($fp != FALSE) + fclose($fp); + + log_rd2("STEP_GET [".$sess."]: return false "); return (FALSE); } + static function unproxy_step($sess) { + log_rd2("UNPROXY: ".PROXY_PATH."/".$sess.".step"); + if (file_exists(PROXY_PATH) == FALSE) + return; + @unlink(PROXY_PATH."/".$sess.".step"); + } + function reset() { $curtime = time(); log_legal($curtime, $this, "STAT:LOGOUT", ''); $tmp_sess = $this->sess; $this->sess = ""; - step_unproxy($tmp_sess); + self::unproxy_step($tmp_sess); $this->name = ""; // OK here while (array_pop($this->comm) != NULL); $this->step = 0; @@ -868,149 +983,118 @@ class User { $this->the_end = FALSE; } - - - // SHSPLIT save and load function for the User class. static function load_data($id, $sess) { - // error_log("User::load_data BEGIN", 0); - - log_main("load_data: id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] "); - - $doexit = FALSE; - do { - if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) { - log_main("ftok failed"); - $doexit = TRUE; - break; - } - - if (($shm_sz = sharedmem_sz($tok)) == -1) { - log_main("shmop_open failed"); - } - - if ($shm_sz == -1) - $shm_sz = SHM_DIMS_U_MIN; - - if ($shm = shm_attach($tok, $shm_sz)) { - $user = @shm_get_var($shm, $tok); - - if ($sess != FALSE && $user->sess != $sess) { - $doexit = TRUE; - break; - } - log_only("user == ".($user == FALSE ? "FALSE" : "TRUE")." user === ".($user === FALSE ? "FALSE" : "TRUE")." user isset ".(isset($user) ? "TRUE" : "FALSE")); - if (isset($user)) - log_only("bri count ".count($user)); - - if ($user == FALSE) { - log_only("INIT MAIN DATA"); - - // SHSPLIT FIXME: init_data for User class ?? - $user = User::create($id, "", ""); - if (@shm_put_var($shm, $tok, $user) == FALSE) { - log_only("PUT_VAR FALLITA ".strlen(serialize($user))); - log_only(serialize($user)); - } - } - - $user->shm_sz = $shm_sz; - - shm_detach($shm); - } + log_main("load_data: id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] "); - // - // SHSPLIT: load users from the shared memory - // - return ($user); - } while (0); - - if ($doexit) - exit(); - - return (FALSE); + do { + if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) { + log_main("ftok failed"); + break; + } + + if (($shm_sz = sharedmem_sz($tok)) == -1) { + log_main("shmop_open failed"); + } + + if ($shm_sz == -1) + $shm_sz = SHM_DIMS_U_MIN; + + if ($shm = shm_attach($tok, $shm_sz)) { + if (($user = @shm_get_var($shm, $tok)) == FALSE) { + break; + } + if ($sess != FALSE && $user->sess != $sess) { + break; + } + log_only("user == ".($user == FALSE ? "FALSE" : "TRUE")." user === ".($user === FALSE ? "FALSE" : "TRUE")." user isset ".(isset($user) ? "TRUE" : "FALSE")); + + if ($user == FALSE) { + log_only("INIT MAIN DATA"); + + // SHSPLIT FIXME: init_data for User class ?? + $user = User::create($id, "", ""); + if (@shm_put_var($shm, $tok, $user) == FALSE) { + log_only("PUT_VAR FALLITA ".strlen(serialize($user))); + log_only(serialize($user)); + } + log_shme("User::save_data2"); + } + else { + if ($sess != FALSE) { + /* + * NOTE: this part is for check only, theoretically + * user->step anch proxy_step are set allways at the same value + */ + $old_step = $user->step; + $arr = User::load_step($sess); + $user->step = $arr['s']; + if ($old_step != $user->step) { + log_crit("steps are diffetents User->step ".$user->step." Old_step: ".$old_step); + } + } + } + $user->shm_sz = $shm_sz; + + shm_detach($shm); + } + + // + // SHSPLIT: load users from the shared memory + // + return ($user); + } while (0); + + return (FALSE); } - function save_data($user, $id) + static function save_data($user, $id) { - GLOBAL $sess; - - $shm = FALSE; - - // var_dump($user); - // error_log("User::save_data BEGIN", 0); - - if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) { - return (FALSE); - } - while ($user->shm_sz < SHM_DIMS_U_MAX) { - if (($shm = shm_attach($tok, $user->shm_sz)) == FALSE) - break; + GLOBAL $sess; - // log_only("PUT_VAR DI ".strlen(serialize($user))); - if (shm_put_var($shm, $tok, $user) != FALSE) { - shm_detach($shm); - log_main("User[".$id."] saved."); - return (TRUE); - } - if (shm_remove($shm) === FALSE) { - log_only("REMOVE FALLITA"); - break; + $shm = FALSE; + + if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) { + return (FALSE); } - shm_detach($shm); - $user->shm_sz += SHM_DIMS_U_DLT; - } - - if ($shm) - shm_detach($shm); - - return (FALSE); - } - - - static function step_get($sess) - { - $fp = FALSE; - do { - if (validate_sess($sess) == FALSE) + while ($user->shm_sz < SHM_DIMS_U_MAX) { + if (($shm = shm_attach($tok, $user->shm_sz)) == FALSE) break; - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE) - break; - if (($s = fread($fp, 8)) == FALSE) - break; - if (strlen($s) != 8) + // log_only("PUT_VAR DI ".strlen(serialize($user))); + if (@shm_put_var($shm, $tok, $user) != FALSE) { + shm_detach($shm); + if ($user->sess != "") + $user->save_step(); + + log_shme("User::save_data"); + + log_main("User[".$id."] saved."); + return (TRUE); + } + if (shm_remove($shm) === FALSE) { + log_only("REMOVE FALLITA"); break; - $arr = unpack('Ls/Li', $s); - fclose($fp); - - // log_rd2("A0: ".$arr[0]." A1: ".$arr[1]); - return ($arr); - } while (0); - - if ($fp != FALSE) - fclose($fp); + } + shm_detach($shm); + $user->shm_sz += SHM_DIMS_U_DLT; + } - log_rd2("STEP_GET [".$sess."]: return false "); + if ($shm) + shm_detach($shm); return (FALSE); } -} // end class User +} // end class User -function step_unproxy($sess) { - log_rd2("UNPROXY: ".PROXY_PATH."/".$sess.".step"); - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - @unlink(PROXY_PATH."/".$sess.".step"); -} class Room { + static $delta_t; + var $user; var $table; var $comm; // commands for many people @@ -1023,11 +1107,11 @@ class Room { $this->table = array(); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $this->user[$i] =& User::create($i, "", ""); + $this->user[$i] = User::create($i, "", ""); } for ($i = 0 ; $i < TABLES_N ; $i++) { - $this->table[$i] =& Table::create($i); + $this->table[$i] = Table::create($i); /* OLD METHOD if ($i < 12) { $row = ( (((int)($i / 4)) % 2) == 0 ); @@ -1060,24 +1144,27 @@ class Room { $curtime = time(); // externalized if ($force || $this->garbage_timeout < $curtime) { - if ($force || Room::garbage_time_is_expired($curtime)) { + if (!$force && !Room::garbage_time_is_expired($curtime)) { + return ($ismod); + } + webservers_check(); // FIXME BRISK4: include for each kind of table require_once("${G_base}briskin5/Obj/briskin5.phh"); // Before all align times with table timeout for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { - $table_cur =& $this->table[$table_idx]; + $table_cur = $this->table[$table_idx]; // if the table is complete and exists its shared mem we get the info about users lacc if ($table_cur->player_n == PLAYERS_N) { log_main("PLAYERS == N TABLE ".$table_idx); - if (($sem = Briskin5::lock_data($table_idx)) != FALSE) { + if (($sem = Bin5::lock_data(TRUE, $table_idx)) != FALSE) { log_main("bin5 lock data success"); $no_recovery = FALSE; - if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { + if (($bri = Bin5::load_data($table_idx)) != FALSE) { if ($table_cur->table_token != $bri->table_token) { log_main("ERROR: not matching table_token. Room: ".$table_cur->table_token." Table: ".$bri->table_token); log_main("ERROR: not matching table_start. Room: ".$table_cur->table_start." Table: ".$bri->table_start); @@ -1093,11 +1180,11 @@ class Room { log_main("garbage_manager: bri loaded successfully."); $bri->garbage_manager(TRUE); - $bri_table = &$bri->table[0]; + $bri_table = $bri->table[0]; // is the end of the table if ($bri->the_end == TRUE) { - /* + /* * DESTROY OF FINISHED TABLE && MOVE PLAYER TO ROOM AGAIN */ log_main("garbage_manager: INSIDE THE END."); @@ -1109,8 +1196,8 @@ class Room { for ($i = 0 ; $i < $bri_table->player_n ; $i++) { // stat must be "table" by definition - $user_cur =& $this->user[$table_cur->player[$i]]; - $bri_user =& $bri->user[$i]; + $user_cur = $this->user[$table_cur->player[$i]]; + $bri_user = $bri->user[$i]; $user_cur->subst = $bri_user->subst; $user_cur->step = $bri_user->step; @@ -1121,10 +1208,11 @@ class Room { log_legal($curtime, $user_cur, "STAT:DESTROY_GAME", $plist); - $this->room_join_wakeup(&$user_cur, FALSE, 0); + $this->room_join_wakeup($user_cur, FALSE, 0); $table_cur->table_token = ""; $table_cur->wakeup_time = $curtime + WAKEUP_TIME; - Briskin5::destroy_data($table_idx); + + $bri->destroy_data($table_idx); } else { log_main("gm:: save_data"); @@ -1133,14 +1221,14 @@ class Room { $this->user[$table_cur->player[$i]]->lacc = $bri->user[$i]->lacc; } - Briskin5::save_data(&$bri); + Bin5::save_data($bri); } - } // else if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { + } // else if (($bri = Bin5::load_data($table_idx)) != FALSE) { else if ($no_recovery == FALSE) { log_crit("ERROR: table ".$table_idx." unrecoverable join"); for ($i = 0 ; $i < $table_cur->player_n ; $i++) { - $user_cur = &$this->user[$table_cur->player[$i]]; + $user_cur = $this->user[$table_cur->player[$i]]; $user_cur->subst = "shutdowner"; $user_cur->step_inc(); @@ -1159,11 +1247,11 @@ class Room { } log_legal($curtime, $user_cur, "STAT:DESTROY_GAME(RECOVERY)", $plist); - $this->room_join_wakeup(&$user_cur, TRUE, -2); + $this->room_join_wakeup($user_cur, TRUE, -2); $table_cur->table_token = ""; } - Briskin5::unlock_data($sem); + Bin5::unlock_data($sem); } // bri::lock_data } // if ($table_cur->player_n == PLAYERS_N) { } // for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { @@ -1171,7 +1259,7 @@ class Room { log_rd2("out new loop."); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; + $user_cur = $this->user[$i]; log_rd2("User: ".$user_cur->name." stat: ".$user_cur->stat." subst: ".$user_cur->subst); @@ -1191,7 +1279,7 @@ class Room { if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table') $this->room_wakeup($user_cur); else if ($user_cur->subst == 'standup') - $this->room_outstandup(&$user_cur); + $this->room_outstandup($user_cur); else log_rd2("LOGOUT FROM WHAT ???"); } @@ -1210,14 +1298,13 @@ class Room { log_rd2("GARBAGE UPDATED!"); // externalized $this->garbage_timeout = time() + GARBAGE_TIMEOUT; - Room::garbage_time_expire_set(time() + GARBAGE_TIMEOUT); + Room::garbage_time_expire_set($curtime + GARBAGE_TIMEOUT); $ismod = TRUE; - } return ($ismod); } - function show_room($user_step, &$user) + function show_room($user_step, $user) { GLOBAL $G_lang, $mlang_brisk; log_main("show_room: username: ".$user->name); @@ -1271,7 +1358,7 @@ class Room { function room_wakeup($user) { $table_idx = $user->table; - $table = &$this->table[$table_idx]; + $table = $this->table[$table_idx]; log_main("WAKEUP: begin function table:".$table_idx." stat: ".$user->stat." subst: ".$user->subst); @@ -1282,7 +1369,7 @@ class Room { log_main("WAKEUP: from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n); for ($i = 0 ; $i < $table->player_n ; $i++) { - $user_cur = &$this->user[$table->player[$i]]; + $user_cur = $this->user[$table->player[$i]]; log_main("PREIMPOST: INLOOP name: ".$user_cur->name); if ($user->idx_get() != $table->player[$i]) { @@ -1312,7 +1399,7 @@ class Room { /* aggiorna l'array dei giocatori al tavolo. */ - $table->user_rem(&$this, &$user); + $table->user_rem($this, $user); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { $user_cur = $this->user[$i]; @@ -1360,10 +1447,10 @@ class Room { } } - function room_join_wakeup(&$user, $update_lacc = FALSE, $trans_delta) + function room_join_wakeup($user, $update_lacc = FALSE, $trans_delta) { $table_idx = $user->table; - $table = &$this->table[$table_idx]; + $table = $this->table[$table_idx]; log_main("JOIN_WAKEUP: begin function table:".$table_idx." stat: ".$user->stat." subst: ".$user->subst); @@ -1375,7 +1462,7 @@ class Room { log_main("JOIN WAKEUP: from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n); for ($i = 0 ; $i < $table->player_n ; $i++) { - $user_cur = &$this->user[$table->player[$i]]; + $user_cur = $this->user[$table->player[$i]]; log_main("PREIMPOST INLOOP name: ".$user_cur->name); if ($user_cur->sess != "") { if ($update_lacc == TRUE) { @@ -1390,7 +1477,7 @@ class Room { $user_cur->stat_set("room"); $user_cur->subst = "standup"; $user_cur->table = -1; - $user_wup[$user_wup_n++] = &$user_cur; + $user_wup[$user_wup_n++] = $user_cur; $remove_wagon = FALSE; if($table->wag_own == $table->player[$i]) { @@ -1403,13 +1490,13 @@ class Room { } for ($wup_idx = 0 ; $wup_idx < $user_wup_n ; $wup_idx++) - $table->user_rem(&$this, &$user_wup[$wup_idx]); + $table->user_rem($this, $user_wup[$wup_idx]); /* aggiorna l'array dei giocatori al tavolo. */ for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { log_main("START LOOP"); - $user_cur = &$this->user[$i]; + $user_cur = $this->user[$i]; if ($user_cur->sess == '' || $user_cur->stat != 'room') { log_main("name: ".$user_cur->name."skip subst: ".$user_cur->subst); continue; @@ -1445,7 +1532,7 @@ class Room { $user_cur->trans_step = $user_cur->step + 1 + $trans_delta; $user_cur->comm[$user_cur->step % COMM_N] = ""; $user_cur->step_inc(); - $user_cur->comm[$user_cur->step % COMM_N] = $this->show_room(($user_cur->step + 1), &$user_cur); + $user_cur->comm[$user_cur->step % COMM_N] = $this->show_room(($user_cur->step + 1), $user_cur); $user_cur->step_inc(); log_main("POST show_room username: ".$user_cur->name." STEP: ".$user_cur->step); @@ -1466,23 +1553,23 @@ class Room { } } - function room_outstandup(&$user) + function room_outstandup($user) { - $this->room_sitdown(&$user, -1); + $this->room_sitdown($user, -1); } - function table_update(&$user) + function table_update($user) { log_main("table_update: pre - USER: ".$user->name); $table_idx = $user->table; if ($table_idx > -1) - $table = &$this->table[$table_idx]; + $table = $this->table[$table_idx]; for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { $ret = ""; - $user_cur = &$this->user[$i]; + $user_cur = $this->user[$i]; if ($user_cur->sess == '' || $user_cur->stat != 'room') continue; @@ -1525,7 +1612,7 @@ class Room { for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { $ret = ""; - $user_cur = &$this->user[$i]; + $user_cur = $this->user[$i]; if ($user_cur->sess == '' || $user_cur->stat != 'room') continue; @@ -1588,7 +1675,7 @@ class Room { break; } - $table = &$this->table[$user->table]; + $table = $this->table[$user->table]; if ($table->wag_own != -1) { // MLANG
Il messaggio di segnalazione del tavolo è già attivato.

@@ -1711,11 +1798,11 @@ class Room { $msg = "COMMAND ".$msg; for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; + $user_cur = $this->user[$i]; if ($user_cur->sess == '') continue; - if ($user_cur->name == $name_new) + if (strcasecmp($user_cur->name,$name_new) == 0) break; } if ($i < MAX_PLAYERS) { @@ -1906,17 +1993,17 @@ class Room { require_once("${G_base}briskin5/Obj/briskin5.phh"); // Before all align times with table timeout for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { - $table_cur =& $this->table[$table_idx]; + $table_cur = $this->table[$table_idx]; // if the table is complete and exists its shared mem we get the info about users lacc if ($table_cur->player_n == PLAYERS_N) { log_main("PLAYERS == N TABLE ".$table_idx); - if (($sem = Briskin5::lock_data($table_idx)) != FALSE) { + if (($sem = Bin5::lock_data(TRUE, $table_idx)) != FALSE) { log_main("bin5 lock data success"); $no_recovery = FALSE; - if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { + if (($bri = Bin5::load_data($table_idx)) != FALSE) { if ($table_cur->table_token != $bri->table_token) { log_main("ERROR: not matching table_token. Room: ".$table_cur->table_token." Table: ".$bri->table_token); $bri = FALSE; @@ -1924,10 +2011,10 @@ class Room { } if ($bri != FALSE) { - $bri_table = &$bri->table[0]; + $bri_table = $bri->table[0]; for ($i = 0 ; $i < $bri_table->player_n ; $i++) { // stat must be "table" by definition - $bri_user =& $bri->user[$i]; + $bri_user = $bri->user[$i]; if ($target != "" && $bri_user->name != $target) continue; @@ -1936,9 +2023,9 @@ class Room { $bri_user->comm[$bri_user->step % COMM_N] .= $to_tabl; $bri_user->step_inc(); } - Briskin5::save_data(&$bri); + Bin5::save_data($bri); } - Briskin5::unlock_data($sem); + Bin5::unlock_data($sem); } // bri::lock_data } // if ($table_cur->player_n == PLAYERS_N) { } // for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { @@ -1946,11 +2033,11 @@ class Room { if ($update_room) { if ($user->stat == 'room' && $user->subst == 'standup') { - $this->standup_update(&$user); + $this->standup_update($user); } else if ($user->stat == 'room' && $user->subst == 'sitdown') { log_main("chatt_send pre table update"); - $this->table_update(&$user); + $this->table_update($user); log_main("chatt_send post table update"); } } // if ($update_room ... @@ -1967,7 +2054,7 @@ class Room { if (strcmp($sess, $this->user[$i]->sess) == 0) { // find it $idx = $i; - $ret = &$this->user[$i]; + $ret = $this->user[$i]; return ($ret); } } @@ -2029,7 +2116,6 @@ class Room { log_auth("XXX", "authenticate: ".($authenticate != FALSE ? "TRUE" : "FALSE")); if ($authenticate != FALSE) { - // error_log(print_r(&$authenticate, TRUE),0); $user_type = $authenticate->type_get(); } else { @@ -2071,12 +2157,12 @@ class Room { log_auth("XXX", sprintf("TROVATO A QUESTO PUNTO [%d] sess [%s] name [%s]", $idx, $sess, $name_new)); - /* there is another user logged with your account and you and him have authenticated => che new user + /* there is another user logged with your account and you and him have authenticated => new user get the session of the old user */ if ($ghost > -1 && $ghost_auth && ($authenticate != FALSE)) { /* swap session */ - $ghost_user =& $this->user[$ghost]; + $ghost_user = $this->user[$ghost]; $curtime = time(); $ghost_user->step_inc(); if ($sess == "") { @@ -2092,15 +2178,15 @@ class Room { if ($ghost_user->stat == "table" && $this->table[$table_idx]->player_n == PLAYERS_N) { // FIXME BRISK4: include for each kind of table require_once("${G_base}briskin5/Obj/briskin5.phh"); - if (($brisem = Briskin5::lock_data($table_idx)) != FALSE) { - if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { + if (($brisem = Bin5::lock_data(TRUE, $table_idx)) != FALSE) { + if (($bri = Bin5::load_data($table_idx)) != FALSE) { if ($bri->the_end != TRUE) { $bri->user[$ghost_user->table_pos]->step_inc(); $bri->user[$ghost_user->table_pos]->sess = $sess; - Briskin5::save_data(&$bri); + Bin5::save_data($bri); } } - Briskin5::unlock_data($brisem); + Bin5::unlock_data($brisem); } } @@ -2154,7 +2240,7 @@ class Room { if ($ghost > -1) { log_main("ghost: rename!"); - $ghost_user =& $this->user[$ghost]; + $ghost_user = $this->user[$ghost]; if ($ghost_auth == FALSE) { for ($sfx = 1 ; $sfx <= MAX_PLAYERS ; $sfx++) { @@ -2163,7 +2249,7 @@ class Room { if (strcmp("", $this->user[$i]->sess) == 0) continue; - if (strcmp($this->user[$i]->name, $ghostname) == 0) { + if (strcasecmp($this->user[$i]->name, $ghostname) == 0) { $ghostname = ''; break; } @@ -2175,11 +2261,11 @@ class Room { $ghost_user->name = $ghostname; if ($ghost_user->stat == 'room' && $ghost_user->subst == 'standup') { - $this->standup_update(&$ghost_user); + $this->standup_update($ghost_user); } else { log_main("chatt_send pre table update"); - $this->table_update(&$ghost_user); + $this->table_update($ghost_user); log_main("chatt_send post table update"); } } // if ($ghost_auth == FALSE @@ -2240,14 +2326,10 @@ class Room { function load_data() { GLOBAL $sess; - $doexit = FALSE; - - // error_log("Room::load_data BEGIN", 0); do { if (($tok = @ftok(FTOK_PATH."/main", "B")) == -1) { log_main("ftok failed"); - $doexit = TRUE; break; } @@ -2259,7 +2341,7 @@ class Room { $shm_sz = SHM_DIMS_MIN; if ($shm = shm_attach($tok, $shm_sz)) { - $room = @shm_get_var($shm, $tok); + $room = @shm_get_var($shm, $tok); // CHECKED BELOW log_only("bri == ".($room == FALSE ? "FALSE" : "TRUE")." bri === ".($room === FALSE ? "FALSE" : "TRUE")." bri isset ".(isset($room) ? "TRUE" : "FALSE")); if (isset($room)) @@ -2269,10 +2351,10 @@ class Room { log_only("INIT MAIN DATA"); shm_detach($shm); - // error_log("DE CHE", 0); - $room = Room::create(); + log_shme("Room::create"); + if (Room::save_data($room) == FALSE) return FALSE; @@ -2283,7 +2365,13 @@ class Room { shm_detach($shm); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $room->user[$i] = User::load_data($i, FALSE); + if (($room->user[$i] = User::load_data($i, FALSE)) == FALSE) { + log_crit("User::load_data failed"); + break; + } + } + if ($i < MAX_PLAYERS) { + break; } } @@ -2293,14 +2381,11 @@ class Room { return ($room); } while (0); - if ($doexit) - exit(); - return (FALSE); } - function save_data_orig(&$room) + function save_data_orig($room) { GLOBAL $sess; @@ -2316,7 +2401,7 @@ class Room { break; // log_only("PUT_VAR DI ".strlen(serialize($room))); - if (shm_put_var($shm, $tok, $room) != FALSE) { + if (@shm_put_var($shm, $tok, $room) != FALSE) { shm_detach($shm); return (TRUE); } @@ -2335,16 +2420,13 @@ class Room { } - function save_data(&$room) + function save_data($room) { GLOBAL $sess; $ret = FALSE; $shm = FALSE; - // var_dump($room); - // error_log("Room::save_data BEGIN", 0); - if (($tok = @ftok(FTOK_PATH."/main", "B")) == -1) return (FALSE); @@ -2361,7 +2443,8 @@ class Room { break; // log_only("PUT_VAR DI ".strlen(serialize($room))); - if (shm_put_var($shm, $tok, $room) != FALSE) { + if (@shm_put_var($shm, $tok, $room) != FALSE) { + log_shme("Room::save_data"); $ret = TRUE; break; } @@ -2386,34 +2469,25 @@ class Room { return ($ret); } - static function lock_data() + static function lock_data($is_exclusive) { - GLOBAL $sess; - - // echo "LOCK: ".FTOK_PATH."/main"; - // exit; - if (($tok = @ftok(FTOK_PATH."/main", "B")) == -1) { - return (FALSE); - } - // echo "FTOK ".$tok."
"; - if (($res = sem_get($tok)) == FALSE) { - return (FALSE); - } - if (sem_acquire($res)) { - log_lock("LOCK room"); + if (($res = file_lock(FTOK_PATH."/main", $is_exclusive)) != FALSE) { + self::$delta_t = microtime(TRUE); + log_lock("LOCK room [".self::$delta_t."]"); + return ($res); } - else - return (FALSE); + + return (FALSE); } static function unlock_data($res) { GLOBAL $sess; - log_lock("UNLOCK room"); + log_lock("UNLOCK room [".(microtime(TRUE) - (self::$delta_t))."]"); - return (sem_release($res)); + file_unlock($res); } @@ -2465,14 +2539,14 @@ class Room { // $sess = $user->sess; - $table = &$this->table[$table_idx]; + $table = $this->table[$table_idx]; if ($user->stat != 'room') return; $content = "[ "; for ($i = 0 ; $i < $table->player_n ; $i++) { - $user_cur = &$this->user[$table->player[$i]]; + $user_cur = $this->user[$table->player[$i]]; $flags = $user_cur->flags; @@ -2497,12 +2571,12 @@ class Room { $fp = FALSE; do { if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - if (($fp = @fopen(PROXY_PATH."/room_garbage_time.expired", 'rb')) == FALSE) + mkdir(PROXY_PATH, 0775, TRUE); + if (($fp = @fopen(PROXY_PATH."/garbage_time.expired", 'rb')) == FALSE) break; if (($s = fread($fp, 4)) == FALSE) break; - if (strlen($s) != 4) + if (mb_strlen($s, "ASCII") != 4) break; $arr = unpack('Le', $s); if ($arr['e'] > $tm) @@ -2521,8 +2595,8 @@ class Room { { do { if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - if (($fp = @fopen(PROXY_PATH."/room_garbage_time.expired", 'wb')) == FALSE) + mkdir(PROXY_PATH, 0775, TRUE); + if (($fp = @fopen(PROXY_PATH."/garbage_time.expired", 'wb')) == FALSE) break; fwrite($fp, pack("L",$tm)); fclose($fp); @@ -2559,6 +2633,16 @@ function btrace_line($ar) return ($ret); } +function trace_ftok($id, $add) +{ + // NOTE: without space to use sed to substitute "= @ftok(" with "= @ftok(" + $tok=@ftok($id, $add); + + log_shme($tok.": ".$id." + ".$add); + + return ($tok); +} + function log_mop($step, $log) { GLOBAL $sess, $PHP_SELF; @@ -2574,7 +2658,10 @@ function log_mop($step, $log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LMOP) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("LMOP: [%f] [%05d] [%s] [%s]\n", gettimeofday(TRUE), $step, $log, $btrace)); fclose($fp); @@ -2597,7 +2684,10 @@ function log_only2($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONL2) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("ONL2: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2619,7 +2709,10 @@ function log_crit($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CRIT) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("CRIT: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2641,7 +2734,10 @@ function log_only($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONLY) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("ONLY: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2663,7 +2759,10 @@ function log_main($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_MAIN) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("MAIN: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2684,8 +2783,11 @@ function log_rd($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_READ) == 0) return; - - $btrace = btrace_line(debug_backtrace()); + + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("READ: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2707,7 +2809,10 @@ function log_rd2($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_REA2) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("REA2: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); @@ -2729,8 +2834,11 @@ function log_send($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SEND) == 0) return; - - $btrace = btrace_line(debug_backtrace()); + + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("SEND: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2752,7 +2860,10 @@ function log_lock($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOCK) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("LOCK: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2774,7 +2885,10 @@ function log_wr($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_WRIT) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("WRIT: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2796,7 +2910,10 @@ function log_load($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOAD) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("LOAD: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2813,16 +2930,45 @@ function log_auth($sess, $log) if (( (BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_AUTH) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("LOAD: [%s] [%d] [%s] [%s]\n", $sess, time(), $log, $btrace)); fclose($fp); } } +function log_shme($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SHME) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SHME) == 0) + return; + + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("SHME: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } +} + + // function log_legal($curtime, $sess, $name, $where, $mesg) -function log_legal($curtime, &$user, $where, $mesg) +function log_legal($curtime, $user, $where, $mesg) { GLOBAL $_SERVER; @@ -2835,28 +2981,6 @@ function log_legal($curtime, &$user, $where, $mesg) } } - -function lock_banlist() -{ - if (($tok = @ftok(FTOK_PATH."/main", "L")) == -1) { - echo "FTOK FAILED"; - exit; - } - if (($res = sem_get($tok)) == FALSE) { - echo "SEM_GET FAILED"; - exit; - } - if (sem_acquire($res)) - return ($res); - else - return (FALSE); -} - -function unlock_banlist($res) -{ - return (sem_release($res)); -} - function table_act_content($isstanding, $sitted, $table, $cur_table, $allowed) { $ret = ""; @@ -2941,6 +3065,8 @@ function secstoword($secs) { GLOBAL $G_lang; + $ret = ""; + $mins = floor($secs / 60); $secs = $secs % 60; if ($G_lang == 'en') { @@ -2974,62 +3100,52 @@ function sharedmem_sz($tok) } class Warrant { - function lock_data() + static $delta_t; + + static function lock_data($is_exclusive) { - GLOBAL $sess; - - if (($tok = @ftok(FTOK_PATH."/warrant", "B")) == -1) { - return (FALSE); - } - // echo "FTOK ".$tok."
"; - if (($res = sem_get($tok)) == FALSE) { - return (FALSE); - } - if (sem_acquire($res)) { - log_lock("LOCK warrant"); - return ($res); - } - else + if (($res = file_lock(FTOK_PATH."/warrant", $is_exclusive)) != FALSE) { + self::$delta_t = microtime(TRUE); + log_lock("LOCK warrant [".self::$delta_t."]"); + + return ($res); + } + return (FALSE); } - function unlock_data($res) + static function unlock_data($res) { GLOBAL $sess; - log_lock("UNLOCK warrant"); - - return (sem_release($res)); + log_lock("UNLOCK warrant [".(microtime(TRUE) - (self::$delta_t))."]"); + + file_unlock($res); } } class Poll { - function lock_data() + static $delta_t; + + static function lock_data($is_exclusive) { - GLOBAL $sess; - - if (($tok = @ftok(FTOK_PATH."/poll", "B")) == -1) { - return (FALSE); - } - // echo "FTOK ".$tok."
"; - if (($res = sem_get($tok)) == FALSE) { - return (FALSE); - } - if (sem_acquire($res)) { - log_lock("LOCK poll"); - return ($res); - } - else + if (($res = file_lock(FTOK_PATH."/poll", $is_exclusive)) != FALSE) { + self::$delta_t = microtime(TRUE); + log_lock("LOCK poll [".self::$delta_t."]"); + + return ($res); + } + return (FALSE); } - function unlock_data($res) + static function unlock_data($res) { GLOBAL $sess; - log_lock("UNLOCK poll"); + log_lock("UNLOCK poll [".(microtime(TRUE) - (self::$delta_t))."]"); - return (sem_release($res)); + file_unlock($res); } }