define(GARBAGE_TIMEOUT, 10);
define(NICKSERV, "<i>BriskServ</i>");
+define(LOCK_SHARE_MAX, 10000);
define(DBG_ONL2, 0x0001);
define(DBG_ONLY, 0x0002);
<br><b>version '.$G_brisk_version.'</b><br><br>
Copyright 2006-2009 <a href=\\"mailto:brisk@alternativeoutput.it\\">Matteo Nastasi</a> (aka mop)<br><br>');
+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;
+
+ $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( """ );
return ($ismod);
}
+ webservers_check();
// FIXME BRISK4: include for each kind of table
require_once("${G_base}briskin5/Obj/briskin5.phh");
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;
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;
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();
return ($ret);
}
- static function lock_data()
+ static function lock_data($is_exclusive)
{
GLOBAL $sess;
return (FALSE);
}
// echo "FTOK ".$tok."<br>";
- if (($res = sem_get($tok)) == FALSE) {
+ if (($res = sem_get($tok, ($is_exclusive ? 1 : LOCK_SHARE_MAX) )) == FALSE) {
return (FALSE);
}
if (sem_acquire($res)) {
class Warrant {
static $delta_t;
- static function lock_data()
+ static function lock_data($is_exclusive)
{
GLOBAL $sess;
return (FALSE);
}
// echo "FTOK ".$tok."<br>";
- if (($res = sem_get($tok)) == FALSE) {
+ if (($res = sem_get($tok, ($is_exclusive ? 1 : LOCK_SHARE_MAX) )) == FALSE) {
return (FALSE);
}
if (sem_acquire($res)) {
class Poll {
static $delta_t;
- static function lock_data()
+ static function lock_data($is_exclusive)
{
GLOBAL $sess;
return (FALSE);
}
// echo "FTOK ".$tok."<br>";
- if (($res = sem_get($tok)) == FALSE) {
+ if (($res = sem_get($tok, ($is_exclusive ? 1 : LOCK_SHARE_MAX) )) == FALSE) {
return (FALSE);
}
if (sem_acquire($res)) {