Changeset 129
- Timestamp:
- 10/13/05 22:18:29 (3 years ago)
- Files:
-
- eaccelerator/trunk/ChangeLog (modified) (1 diff)
- eaccelerator/trunk/mm.c (modified) (22 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
eaccelerator/trunk/ChangeLog
r128 r129 2 2 3 3 * 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. 4 7 5 8 2005-08-03 Bart Vanbrabant <bart.vanbrabant at zoeloelip.be> eaccelerator/trunk/mm.c
r123 r129 177 177 #endif 178 178 179 /*********************************/ 180 /* Semaphores */ 181 /********************************/ 182 183 /* ######################################################################### */ 184 179 185 #define MM_SEM_TYPE "spinlock" 180 186 #define MM_SEM_CAN_ATTACH … … 206 212 } 207 213 214 /* ######################################################################### */ 215 208 216 #elif defined(MM_SEM_PTHREAD) 209 217 … … 247 255 pthread_mutex_destroy(&lock->mutex); 248 256 } 257 258 /* ######################################################################### */ 249 259 250 260 #elif defined(MM_SEM_POSIX) … … 289 299 sem_close(lock->sem); 290 300 } 301 302 /* ######################################################################### */ 291 303 292 304 #elif defined(MM_SEM_IPC) … … 311 323 union semun arg; 312 324 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) { 314 326 return 0; 315 327 } … … 416 428 } 417 429 430 /* ######################################################################### */ 431 418 432 #elif defined(MM_SEM_FLOCK) 419 433 … … 486 500 unlink(lock->filename); 487 501 } 502 503 /* ######################################################################### */ 488 504 489 505 #elif defined(MM_SEM_BEOS) … … 566 582 } 567 583 584 /* ######################################################################### */ 585 568 586 #elif defined(MM_SEM_NONE) 569 587 … … 600 618 601 619 int 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 } 603 626 } 604 627 605 628 int 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 } 607 635 } 608 636 609 637 /* Shared Memory Implementations */ 638 639 /* ######################################################################### */ 610 640 611 641 #if defined(MM_SHM_IPC) … … 722 752 } 723 753 754 /* ######################################################################### */ 755 724 756 #elif defined(MM_SHM_MMAP_ANON) 725 757 … … 746 778 } 747 779 780 /* ######################################################################### */ 781 748 782 #elif defined(MM_SHM_MMAP_ZERO) 749 783 … … 768 802 munmap(mm,mm->size); 769 803 } 804 805 /* ######################################################################### */ 770 806 771 807 #elif defined(MM_SHM_MMAP_POSIX) … … 807 843 } 808 844 845 /* ######################################################################### */ 846 809 847 #elif defined(MM_SHM_MMAP_FILE) 810 848 … … 839 877 } 840 878 879 /* ######################################################################### */ 880 841 881 #elif defined(MM_SHM_BEOS) 842 882 … … 844 884 #error "Shared memeory type (MM_SHM_BEOS) is not implemented" 845 885 886 /* ######################################################################### */ 887 846 888 #elif defined(MM_SHM_OS2) 847 889 848 890 #define MM_SHM_TYPE "os2" 849 891 #error "Shared memeory type (MM_SHM_OS2) is not implemented" 892 893 /* ######################################################################### */ 850 894 851 895 #elif defined(MM_SHM_WIN32) … … 934 978 } 935 979 980 /* ######################################################################### */ 981 936 982 #elif defined(MM_SHM_MALLOC) 937 983 … … 951 997 free(mm); 952 998 } 999 1000 /* ######################################################################### */ 953 1001 954 1002 #else … … 991 1039 size_t mm_maxsize(MM* mm) { 992 1040 size_t ret; 993 mm_lock(mm, MM_LOCK_RD); 1041 if (!mm_lock(mm, MM_LOCK_RD)) { 1042 return 0; 1043 } 994 1044 ret = mm->available - MM_SIZE(0); 995 1045 mm_unlock(mm); … … 1128 1178 size_t ret = MM_SIZE(0); 1129 1179 mm_free_bucket* p; 1130 mm_lock(mm, MM_LOCK_RD); 1180 if (!mm_lock(mm, MM_LOCK_RD)) { 1181 return 0; 1182 } 1131 1183 p = mm->free_list; 1132 1184 while (p != NULL) { … … 1143 1195 void* mm_malloc_lock(MM* mm, size_t size) { 1144 1196 void *ret; 1145 mm_lock(mm, MM_LOCK_RW); 1197 if (!mm_lock(mm, MM_LOCK_RW)) { 1198 return NULL; 1199 } 1146 1200 ret = mm_malloc_nolock(mm,size); 1147 1201 mm_unlock(mm); … … 1215 1269 mm_mem_head *p; 1216 1270 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 } 1220 1274 p = PTR_TO_HEAD(x); 1221 1275 ret = p->size; … … 1226 1280 size_t mm_available(MM* mm) { 1227 1281 size_t available; 1228 if (mm != NULL) { 1229 mm_lock(mm, MM_LOCK_RD); 1282 if (mm != NULL && mm_lock(mm, MM_LOCK_RD)) { 1230 1283 available = mm->available; 1231 1284 mm_unlock(mm);