' . PHP_EOL ; if($GLOBALS['semaphorecount'] == 0){ ignore_user_abort(true); // Verarbeitung darf NICHT abgebrochen werden!! // echo 'DEBUG: kritischer Bereich betreten
'; } // Loesche alte Ressourcen db_query('DELETE FROM semaphore WHERE TIMESTAMPDIFF(MINUTE, zeit, now()) > 1 and ressource = \''.$resource.'\''); $sql = 'INSERT INTO semaphore(ressource) values(\''.$resource.'\')'; silent_query($sql); if(db_affected_rows() > 0){ // echo 'DEBUG: Semaphore fuer '.$ressource.' belegt!('.db_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($resource){ $sql = 'DELETE FROM semaphore where ressource = \''.$resource.'\''; silent_query($sql); if(db_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 mysqli_fetch_assoc(db_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\''; db_query($sql1); db_query($sql2); } ?>