Avatar billede 4128 Nybegynder
21. marts 2004 - 11:14 Der er 4 kommentarer og
1 løsning

Semaphore Warning: semop() failed in release_sysvsem_sem for key

Denne kode skulle gerne bevirke at kun 1 tråd/bruger kommer igennem af gangen.
Denne fejl kommer desværre bare op hvis 2 kører den samtidigt.
"Warning: semop() failed in release_sysvsem_sem for key 0x1: Invalid argument in Unknown on line 0"
Er der nogen der ved om jeg har lavet en fejl, eller hvad der ellers måtte være galt.

//instantiate shared memory and semaphore
$MEMSIZE    =  2048;//  size of shared memory to allocate
$SEMKEY    =  1;  //  Semaphore key
$SHMKEY    =  2;  //  Shared memory key
//instantiate finished

  $sem_id = sem_get($SEMKEY, 1); // get the information about semaphore, if this does not happen, page reloads
  if ($sem_id === false)
  {
    ?><script language="JavaScript">
    window.location.reload(true)
    </script><?
  }
  else
      //echo "Got semaphore $sem_id.\n";

  // Accuire semaphore
  if (! sem_acquire($sem_id)) // try to get the semaphore, if the semaphore is allready taken, page reloads
  {
      sem_remove($sem_id);
    sleep(3);
    ?><script language="JavaScript">
    window.location.reload(true)
    </script><?
  }
  else
    $shm_id =  shm_attach($SHMKEY, $MEMSIZE); // get information about shared memory access, if problem, page reloads
      if ($shm_id === false)
      {
          sem_remove($sem_id);
        sleep(3);
        ?><script language="JavaScript">
        window.location.reload(true)
        </script><?
      }
      else
    $var1 = 0;
    $var1  =  shm_get_var ($shm_id, 1); // read information about shared memory
    echo ("Tidspunktet for sidste kørsel: ". $var1."<br>");
    $timestamp = time();
    $date_time_array = getdate($timestamp);
    $timestamp = mktime($date_time_array['seconds'], $date_time_array['minutes']);
    $seconds = $date_time_array['seconds'];
    $minutes = $date_time_array['minutes'];
    if ($minutes < 10) //if there is less then 10 minutes in the hour put a zero in front
    $minutes = "0".$minutes;
    if ($seconds < 10) //if there is less then 10 seconds in the minute put a zero in front
    $utime = $minutes."0".$seconds;
    else
    $utime = $minutes.$seconds;
       
    if ($utime <= 4) //If the time has changed to a new hour and the utime is with in 4 seconds of this, page reloads.
    {
            sem_remove($sem_id);
        sleep(2);
        ?><script language="JavaScript">
        window.location.reload(true)
        </script><?
        exit;
    }
    $seconds_old = $var1{2}.$var1{3};
    if ($seconds < 4 && $seconds_old > 56) //if there is a change in the minute 40 seconds is applied
    $var1 = $var1 + 40;
    if($var1)
    {
        $test = $unlocktime-$var1;
        if ($test <= 4 && $test >=0) //If there is less then 4 seconds between the utime and var1(shm utime), page reloads
        {
                sem_remove($sem_id);
            sleep(2);
            ?><script language="JavaScript">
            window.location.reload(true)
            </script><?
            exit;
        }
    }
  // Write variable 1
  if (!shm_put_var($shm_id, 1, "$unlocktime")) //try to write utime to shared memory. If not possible, page reloads
  {
        sem_remove($sem_id);
    sleep(2);
    ?><script language="JavaScript">
    window.location.reload(true)
    </script><?
    exit;   
  }
  // Release semaphore
  if (!sem_release($sem_id)) //try to release semaphore. if not possible, page reloads THIS IS BAD!!!
  {
        sem_remove($sem_id);
    sleep(2);
    ?><script language="JavaScript">
    window.location.reload(true)
    </script><?
    exit;   
  }
Avatar billede 4128 Nybegynder
21. marts 2004 - 11:23 #1
Jeg kan se jeg har lavet en smule rod med $utime og $unlocktime. Det er noget jeg rettede da jeg kopirede tingene ind i denne tråd. i min egen kode eksisterer $utime ikke og de hedder alle $unlocktime.
Så det er ikke dette der er problemet.
Systemet kører perfekt bortset fra fejlmeddelelsen jeg har kopieret ind.
Avatar billede 4128 Nybegynder
21. marts 2004 - 11:25 #2
Jeg havde udkommenteret noget der ikke skulle udkommenteres... Beklager til alle dem der har læst tråden og brugt tid på at svare.
Avatar billede 4128 Nybegynder
21. marts 2004 - 11:44 #3
Jeg kan åbenbart ikke godkende mit eget svar så hvis der er nogen der er hurtige så får de 100 point.
Avatar billede sukos Juniormester
21. marts 2004 - 11:58 #4
?
Du skulle nu gerne kunne vælge dit eget navn, markere det og trykke på "accepter"
Avatar billede 4128 Nybegynder
21. marts 2004 - 12:21 #5
Det virkede lidt bedre... Tak ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester