X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=486fc28b31a65dce8deaca6cf2fd054965f87952;hb=7edf76e645812c232f8090b96b5a68a182ab96bc;hp=67854cfbe18aa2b98e9388e28869a4808e9c1e0f;hpb=04de0e58bd8e0d0de4e317d79611dfdb71180d22;p=brisk.git
diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh
index 67854cf..486fc28 100644
--- a/web/Obj/brisk.phh
+++ b/web/Obj/brisk.phh
@@ -284,12 +284,34 @@ Copyright 2006-2009 Matteo Nasta
version '.$G_brisk_version.'
Copyright 2006-2009 Matteo Nastasi (aka mop)
');
+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 check_webservers()
+function webservers_check()
{
GLOBAL $G_webserver_max;
@@ -1117,7 +1139,7 @@ class Room {
return ($ismod);
}
- check_webservers();
+ webservers_check();
// FIXME BRISK4: include for each kind of table
require_once("${G_base}briskin5/Obj/briskin5.phh");
@@ -2440,25 +2462,14 @@ class Room {
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, ($is_exclusive ? 1 : LOCK_SHARE_MAX) )) == FALSE) {
- return (FALSE);
- }
- if (sem_acquire($res)) {
+ 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)
@@ -2467,7 +2478,7 @@ class Room {
log_lock("UNLOCK room [".(microtime(TRUE) - (self::$delta_t))."]");
- return (sem_release($res));
+ file_unlock($res);
}
@@ -3084,21 +3095,13 @@ class Warrant {
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, ($is_exclusive ? 1 : LOCK_SHARE_MAX) )) == FALSE) {
- return (FALSE);
- }
- if (sem_acquire($res)) {
- self::$delta_t = microtime(TRUE);
- log_lock("LOCK warrant [".self::$delta_t."]");
- 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);
}
@@ -3108,7 +3111,7 @@ class Warrant {
log_lock("UNLOCK warrant [".(microtime(TRUE) - (self::$delta_t))."]");
- return (sem_release($res));
+ file_unlock($res);
}
}
@@ -3117,22 +3120,13 @@ class Poll {
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, ($is_exclusive ? 1 : LOCK_SHARE_MAX) )) == FALSE) {
- return (FALSE);
- }
- if (sem_acquire($res)) {
- self::$delta_t = microtime(TRUE);
- log_lock("LOCK poll [".self::$delta_t."]");
-
- 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);
}
@@ -3142,7 +3136,7 @@ class Poll {
log_lock("UNLOCK poll [".(microtime(TRUE) - (self::$delta_t))."]");
- return (sem_release($res));
+ file_unlock($res);
}
}