X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2FObj%2Fbrisk.phh;h=4dd36c9ea8901b6d8b9d700ce6f942857c26bb86;hb=323f1b5ce4d154e922b024384e6ec8c6f0f6d858;hp=2fe2eace3a8761a62652b48b0664d9a7329d86c8;hpb=26aebda442690d76a953b89c0d0f928c6e5b5078;p=brisk.git
diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh
index 2fe2eac..4dd36c9 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.5.3";
+$G_brisk_version = "3.6.0";
/* MLANG: ALL THE INFO STRINGS IN brisk.phh */
-$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': terza 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: third 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;
@@ -802,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);
@@ -831,7 +914,7 @@ class User {
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));
@@ -853,7 +936,7 @@ class User {
break;
if (file_exists(PROXY_PATH) == FALSE)
- mkdir(PROXY_PATH);
+ mkdir(PROXY_PATH, 0775, TRUE);
if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE)
break;
if (($s = fread($fp, 8)) == FALSE)
@@ -875,13 +958,20 @@ class User {
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;
@@ -897,11 +987,9 @@ class User {
{
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;
}
@@ -913,10 +1001,10 @@ class User {
$shm_sz = SHM_DIMS_U_MIN;
if ($shm = shm_attach($tok, $shm_sz)) {
- $user = @shm_get_var($shm, $tok);
-
+ if (($user = @shm_get_var($shm, $tok)) == FALSE) {
+ break;
+ }
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"));
@@ -930,6 +1018,7 @@ class User {
log_only("PUT_VAR FALLITA ".strlen(serialize($user)));
log_only(serialize($user));
}
+ log_shme("User::save_data2");
}
else {
if ($sess != FALSE) {
@@ -956,9 +1045,6 @@ class User {
return ($user);
} while (0);
- if ($doexit)
- exit();
-
return (FALSE);
}
@@ -977,10 +1063,13 @@ class User {
break;
// log_only("PUT_VAR DI ".strlen(serialize($user)));
- if (shm_put_var($shm, $tok, $user) != FALSE) {
+ 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);
}
@@ -1002,15 +1091,10 @@ 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
@@ -1060,8 +1144,11 @@ 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");
@@ -1073,7 +1160,7 @@ class Room {
if ($table_cur->player_n == PLAYERS_N) {
log_main("PLAYERS == N TABLE ".$table_idx);
- if (($sem = Bin5::lock_data($table_idx)) != FALSE) {
+ if (($sem = Bin5::lock_data(TRUE, $table_idx)) != FALSE) {
log_main("bin5 lock data success");
$no_recovery = FALSE;
@@ -1097,7 +1184,7 @@ class Room {
// 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.");
@@ -1124,7 +1211,8 @@ class Room {
$this->room_join_wakeup($user_cur, FALSE, 0);
$table_cur->table_token = "";
$table_cur->wakeup_time = $curtime + WAKEUP_TIME;
- Bin5::destroy_data($table_idx);
+
+ $bri->destroy_data($table_idx);
}
else {
log_main("gm:: save_data");
@@ -1212,7 +1300,6 @@ class Room {
// externalized $this->garbage_timeout = time() + GARBAGE_TIMEOUT;
Room::garbage_time_expire_set($curtime + GARBAGE_TIMEOUT);
$ismod = TRUE;
- }
return ($ismod);
}
@@ -1715,7 +1802,7 @@ class Room {
if ($user_cur->sess == '')
continue;
- if ($user_cur->name == $name_new)
+ if (strcasecmp($user_cur->name,$name_new) == 0)
break;
}
if ($i < MAX_PLAYERS) {
@@ -1912,7 +1999,7 @@ class Room {
if ($table_cur->player_n == PLAYERS_N) {
log_main("PLAYERS == N TABLE ".$table_idx);
- if (($sem = Bin5::lock_data($table_idx)) != FALSE) {
+ if (($sem = Bin5::lock_data(TRUE, $table_idx)) != FALSE) {
log_main("bin5 lock data success");
$no_recovery = FALSE;
@@ -2070,7 +2157,7 @@ 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 */
@@ -2091,7 +2178,7 @@ 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 = Bin5::lock_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();
@@ -2162,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;
}
@@ -2239,12 +2326,10 @@ class Room {
function load_data()
{
GLOBAL $sess;
- $doexit = FALSE;
do {
if (($tok = @ftok(FTOK_PATH."/main", "B")) == -1) {
log_main("ftok failed");
- $doexit = TRUE;
break;
}
@@ -2256,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))
@@ -2268,6 +2353,8 @@ class Room {
$room = Room::create();
+ log_shme("Room::create");
+
if (Room::save_data($room) == FALSE)
return FALSE;
@@ -2278,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;
}
}
@@ -2288,9 +2381,6 @@ class Room {
return ($room);
} while (0);
- if ($doexit)
- exit();
-
return (FALSE);
}
@@ -2311,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);
}
@@ -2353,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;
}
@@ -2378,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);
}
@@ -2489,7 +2571,7 @@ class Room {
$fp = FALSE;
do {
if (file_exists(PROXY_PATH) == FALSE)
- mkdir(PROXY_PATH);
+ mkdir(PROXY_PATH, 0775, TRUE);
if (($fp = @fopen(PROXY_PATH."/garbage_time.expired", 'rb')) == FALSE)
break;
if (($s = fread($fp, 4)) == FALSE)
@@ -2513,7 +2595,7 @@ class Room {
{
do {
if (file_exists(PROXY_PATH) == FALSE)
- mkdir(PROXY_PATH);
+ mkdir(PROXY_PATH, 0775, TRUE);
if (($fp = @fopen(PROXY_PATH."/garbage_time.expired", 'wb')) == FALSE)
break;
fwrite($fp, pack("L",$tm));
@@ -2551,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;
@@ -2566,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);
@@ -2589,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);
@@ -2611,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);
@@ -2633,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);
@@ -2655,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);
@@ -2676,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);
@@ -2699,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));
@@ -2721,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);
@@ -2744,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);
@@ -2766,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);
@@ -2788,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);
@@ -2805,13 +2930,42 @@ 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)
@@ -2827,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 = "";
@@ -2968,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);
}
}