';
}
// Loesche alte Ressourcen
mysql_query('DELETE FROM semaphore WHERE TIMESTAMPDIFF(MINUTE, zeit, now()) > 5 and ressource = \''.$ressource.'\'');
$sql = 'INSERT INTO semaphore(ressource) values(\''.$ressource.'\')';
mysql_query($sql);
if(mysql_affected_rows() > 0){
// echo 'DEBUG: Semaphore fuer '.$ressource.' belegt!('.mysql_affected_rows().')
';
$GLOBALS['semaphorecount']++;
return true;
}
// echo 'DEBUG:Semaphore fuer '.$ressource.' NICHT belegt!
';
if($GLOBALS['semaphorecount'] == 0){
// echo 'DEBUG: Verlassen des kritischen Bereichs
';
ignore_user_abort(false); // Verarbeitung darf wieder abgebrochen werden!!
}
return false;
}
// @Returns TRUE if ok, FALSE on Semaphore error, NULL on MYQL Error
function semaphoreDown($ressource){
$sql = 'DELETE FROM semaphore where ressource = \''.$ressource.'\'';
mysql_query($sql);
if(mysql_affected_rows() == 0){
// echo 'DEBUG: Semaphore '.$ressource.' war schon freigegeben
';
return false;
}
// echo 'DEBUG: Semaphore '.$ressource.' freigegeben
';
$GLOBALS['semaphorecount']--;
if($GLOBALS['semaphorecount'] == 0){
// echo 'DEBUG: kritischer Bereich verlassen
';
ignore_user_abort(false); // Verarbeitung darf nun wieder abgebrochen werden!!
}
return true;
}
/**
* Diese Funktion ist nur dazu da um zu pruefen ob ueberhaupt ein Lock besteht,
* ohne die Intension die Ressource selbst zu belegen!
* returns true, wenn Semaphore belegt ist, false wenn nicht
*/
function isSemaphoreUP($ressource){
return mysql_fetch_assoc(mysql_query('Select * from semaphore where WHERE TIMESTAMPDIFF(MINUTE, zeit, now()) > 5 and ressource = \''.$ressource.'\'')) != false;
}
function installSemaphoreDatabase(){
$sql1 = 'DROP TABLE `semaphore`';
$sql2 = 'CREATE TABLE `semaphore` (' .
'`ressource` varchar(20) NOT NULL,' .
'`zeit` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,' .
'PRIMARY KEY(`ressource`),' .
'INDEX `Zeitindex`(`zeit`)' .
')' .
'ENGINE = MYISAM ' .
'COMMENT = \'Die Tabelle, die hoffentlich alle Zugriffsprobleme loesen wird\'';
mysql_query($sql1);
mysql_query($sql2);
}
?>