Changeset 129

Show
Ignore:
Timestamp:
10/13/05 22:18:29 (3 years ago)
Author:
zoeloelip
Message:

* Changed semaphore permissions to 0666 so sysvipc locks work. Working

locks seem a bit more important than making the semaphore public. (#1295970)

* Added error messages when a lock can't be aquired or released.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • eaccelerator/trunk/ChangeLog

    r128 r129  
    22 
    33        * Fixed the php5 optimizer bug. 
     4        * Changed semaphore permissions to 0666 so sysvipc locks work. Working  
     5          locks seem a bit more important than making the semaphore public. (#1295970) 
     6        * Added error messages when a lock can't be aquired or released. 
    47 
    582005-08-03 Bart Vanbrabant <bart.vanbrabant at zoeloelip.be> 
  • eaccelerator/trunk/mm.c

    r123 r129  
    177177#endif 
    178178 
     179/*********************************/ 
     180/* Semaphores                    */ 
     181/********************************/ 
     182 
     183/* ######################################################################### */ 
     184 
    179185#define MM_SEM_TYPE "spinlock" 
    180186#define MM_SEM_CAN_ATTACH 
     
    206212} 
    207213 
     214/* ######################################################################### */ 
     215 
    208216#elif defined(MM_SEM_PTHREAD) 
    209217 
     
    247255  pthread_mutex_destroy(&lock->mutex); 
    248256} 
     257 
     258/* ######################################################################### */ 
    249259 
    250260#elif defined(MM_SEM_POSIX) 
     
    289299  sem_close(lock->sem); 
    290300} 
     301 
     302/* ######################################################################### */ 
    291303 
    292304#elif defined(MM_SEM_IPC) 
     
    311323  union semun arg; 
    312324 
    313   if ((lock->semid = semget(IPC_PRIVATE, 1, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR)) < 0) { 
     325  if ((lock->semid = semget(IPC_PRIVATE, 1, IPC_CREAT | 0666)) < 0) { 
    314326    return 0; 
    315327  } 
     
    416428} 
    417429 
     430/* ######################################################################### */ 
     431 
    418432#elif defined(MM_SEM_FLOCK) 
    419433 
     
    486500  unlink(lock->filename); 
    487501} 
     502 
     503/* ######################################################################### */ 
    488504 
    489505#elif defined(MM_SEM_BEOS) 
     
    566582} 
    567583 
     584/* ######################################################################### */ 
     585 
    568586#elif defined(MM_SEM_NONE) 
    569587 
     
    600618 
    601619int mm_lock(MM* mm, int kind) { 
    602   return mm_do_lock(mm->lock, kind); 
     620  if (mm_do_lock(mm->lock, kind)) { 
     621    return 1; 
     622  } else { 
     623    ea_debug_error("eAccelerator: Could not lock!\n"); 
     624    return 0; 
     625  } 
    603626} 
    604627 
    605628int mm_unlock(MM* mm) { 
    606   return mm_do_unlock(mm->lock); 
     629  if (mm_do_unlock(mm->lock)) { 
     630    return 1; 
     631  } else { 
     632    ea_debug_error("eAccelerator: Could not release lock!\n"); 
     633    return 0; 
     634  } 
    607635} 
    608636 
    609637/* Shared Memory Implementations */ 
     638 
     639/* ######################################################################### */ 
    610640 
    611641#if defined(MM_SHM_IPC) 
     
    722752} 
    723753 
     754/* ######################################################################### */ 
     755 
    724756#elif defined(MM_SHM_MMAP_ANON) 
    725757 
     
    746778} 
    747779 
     780/* ######################################################################### */ 
     781 
    748782#elif defined(MM_SHM_MMAP_ZERO) 
    749783 
     
    768802  munmap(mm,mm->size); 
    769803} 
     804 
     805/* ######################################################################### */ 
    770806 
    771807#elif defined(MM_SHM_MMAP_POSIX) 
     
    807843} 
    808844 
     845/* ######################################################################### */ 
     846 
    809847#elif defined(MM_SHM_MMAP_FILE) 
    810848 
     
    839877} 
    840878 
     879/* ######################################################################### */ 
     880 
    841881#elif defined(MM_SHM_BEOS) 
    842882 
     
    844884#error "Shared memeory type (MM_SHM_BEOS) is not implemented" 
    845885 
     886/* ######################################################################### */ 
     887 
    846888#elif defined(MM_SHM_OS2) 
    847889 
    848890#define MM_SHM_TYPE "os2" 
    849891#error "Shared memeory type (MM_SHM_OS2) is not implemented" 
     892 
     893/* ######################################################################### */ 
    850894 
    851895#elif defined(MM_SHM_WIN32) 
     
    934978} 
    935979 
     980/* ######################################################################### */ 
     981 
    936982#elif defined(MM_SHM_MALLOC) 
    937983 
     
    951997  free(mm); 
    952998} 
     999 
     1000/* ######################################################################### */ 
    9531001 
    9541002#else 
     
    9911039size_t mm_maxsize(MM* mm) { 
    9921040  size_t ret; 
    993   mm_lock(mm, MM_LOCK_RD); 
     1041  if (!mm_lock(mm, MM_LOCK_RD)) { 
     1042    return 0; 
     1043  } 
    9941044  ret = mm->available - MM_SIZE(0); 
    9951045  mm_unlock(mm); 
     
    11281178  size_t ret = MM_SIZE(0); 
    11291179  mm_free_bucket* p; 
    1130   mm_lock(mm, MM_LOCK_RD); 
     1180  if (!mm_lock(mm, MM_LOCK_RD)) { 
     1181    return 0; 
     1182  } 
    11311183  p = mm->free_list; 
    11321184  while (p != NULL) { 
     
    11431195void* mm_malloc_lock(MM* mm, size_t size) { 
    11441196  void *ret; 
    1145   mm_lock(mm, MM_LOCK_RW); 
     1197  if (!mm_lock(mm, MM_LOCK_RW)) { 
     1198    return NULL; 
     1199  } 
    11461200  ret = mm_malloc_nolock(mm,size); 
    11471201  mm_unlock(mm); 
     
    12151269  mm_mem_head *p; 
    12161270  size_t ret; 
    1217   if (mm == NULL) return 0; 
    1218   if (x == NULL) return 0; 
    1219   mm_lock(mm, MM_LOCK_RD); 
     1271  if (mm == NULL || x == NULL || !mm_lock(mm, MM_LOCK_RD)) { 
     1272  return 0; 
     1273  } 
    12201274  p = PTR_TO_HEAD(x); 
    12211275  ret = p->size; 
     
    12261280size_t mm_available(MM* mm) { 
    12271281  size_t available; 
    1228   if (mm != NULL) { 
    1229     mm_lock(mm, MM_LOCK_RD); 
     1282  if (mm != NULL && mm_lock(mm, MM_LOCK_RD)) { 
    12301283    available = mm->available; 
    12311284    mm_unlock(mm);