'; } // 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); } ?>