Ticket #232: eaccelerator-lockbug.patch

File eaccelerator-lockbug.patch, 1.1 KB (added by terrysduncan, 3 years ago)

Shared memory locking patch

  • eaccelerator.c

    old new  
    17521752  mm_used_entry  *p = (mm_used_entry*)EAG(used_entries); 
    17531753  if (eaccelerator_mm_instance != NULL) { 
    17541754    EACCELERATOR_UNPROTECT(); 
    1755     mm_unlock(eaccelerator_mm_instance->mm); 
    17561755    if (p != NULL || eaccelerator_mm_instance->locks != NULL) { 
    17571756      EACCELERATOR_LOCK_RW(); 
    17581757      while (p != NULL) { 
  • mm.c

    old new  
    357357  return 1; 
    358358} 
    359359 
     360static int locked = 0; 
     361 
    360362static int mm_do_lock(mm_mutex* lock, int kind) { 
    361363  int rc; 
    362364  struct sembuf op; 
    363365 
     366  if (locked) 
     367  { 
     368     ea_debug_log("eAccelerator: attempted double lock: %u\n", getpid()); 
     369     return 1; 
     370  } 
     371  locked++; 
    364372  op.sem_num = 0; 
    365373  op.sem_op  = -1; 
    366374  op.sem_flg = SEM_UNDO; 
     
    374382  int rc; 
    375383  struct sembuf op; 
    376384 
     385  if (!locked) 
     386  { 
     387     ea_debug_log("eAccelerator: attempted double unlock: %u\n", getpid()); 
     388     return 1; 
     389  } 
     390  locked--; 
    377391  op.sem_num = 0; 
    378392  op.sem_op  = 1; 
    379393  op.sem_flg = SEM_UNDO;