@@ -415,11 +415,38 @@ stderr_last_error(char *msg)
415
415
/* OS Allocation */
416
416
/*****************/
417
417
418
+ static void zend_mm_munmap (void * addr , size_t size )
419
+ {
420
+ #ifdef _WIN32
421
+ if (VirtualFree (addr , 0 , MEM_RELEASE ) == 0 ) {
422
+ #if ZEND_MM_ERROR
423
+ stderr_last_error ("VirtualFree() failed" );
424
+ #endif
425
+ }
426
+ #else
427
+ if (munmap (addr , size ) != 0 ) {
428
+ #if ZEND_MM_ERROR
429
+ fprintf (stderr , "\nmunmap() failed: [%d] %s\n" , errno , strerror (errno ));
430
+ #endif
431
+ }
432
+ #endif
433
+ }
434
+
418
435
#ifndef HAVE_MREMAP
419
436
static void * zend_mm_mmap_fixed (void * addr , size_t size )
420
437
{
421
438
#ifdef _WIN32
422
- return VirtualAlloc (addr , size , MEM_COMMIT | MEM_RESERVE , PAGE_READWRITE );
439
+ void * ptr = VirtualAlloc (addr , size , MEM_COMMIT | MEM_RESERVE , PAGE_READWRITE );
440
+ if (ptr == NULL ) {
441
+ #if ZEND_MM_ERROR
442
+ stderr_last_error ("VirtualAlloc(addr) failed" );
443
+ #endif
444
+ return NULL ;
445
+ } else if (ptr != addr ) {
446
+ zend_mm_munmap (ptr , size );
447
+ return NULL ;
448
+ }
449
+ return ptr ;
423
450
#else
424
451
int flags = MAP_PRIVATE | MAP_ANON ;
425
452
#if defined(MAP_EXCL )
@@ -434,11 +461,7 @@ static void *zend_mm_mmap_fixed(void *addr, size_t size)
434
461
#endif
435
462
return NULL ;
436
463
} else if (ptr != addr ) {
437
- if (munmap (ptr , size ) != 0 ) {
438
- #if ZEND_MM_ERROR
439
- fprintf (stderr , "\nmunmap() failed: [%d] %s\n" , errno , strerror (errno ));
440
- #endif
441
- }
464
+ zend_mm_munmap (ptr , size );
442
465
return NULL ;
443
466
}
444
467
return ptr ;
@@ -450,10 +473,9 @@ static void *zend_mm_mmap(size_t size)
450
473
{
451
474
#ifdef _WIN32
452
475
void * ptr = VirtualAlloc (NULL , size , MEM_COMMIT | MEM_RESERVE , PAGE_READWRITE );
453
-
454
476
if (ptr == NULL ) {
455
477
#if ZEND_MM_ERROR
456
- stderr_last_error ("VirtualAlloc() failed" );
478
+ stderr_last_error ("VirtualAlloc(NULL ) failed" );
457
479
#endif
458
480
return NULL ;
459
481
}
@@ -482,23 +504,6 @@ static void *zend_mm_mmap(size_t size)
482
504
#endif
483
505
}
484
506
485
- static void zend_mm_munmap (void * addr , size_t size )
486
- {
487
- #ifdef _WIN32
488
- if (VirtualFree (addr , 0 , MEM_RELEASE ) == 0 ) {
489
- #if ZEND_MM_ERROR
490
- stderr_last_error ("VirtualFree() failed" );
491
- #endif
492
- }
493
- #else
494
- if (munmap (addr , size ) != 0 ) {
495
- #if ZEND_MM_ERROR
496
- fprintf (stderr , "\nmunmap() failed: [%d] %s\n" , errno , strerror (errno ));
497
- #endif
498
- }
499
- #endif
500
- }
501
-
502
507
/***********/
503
508
/* Bitmask */
504
509
/***********/
@@ -1846,11 +1851,7 @@ static zend_mm_heap *zend_mm_init(void)
1846
1851
1847
1852
if (UNEXPECTED (chunk == NULL )) {
1848
1853
#if ZEND_MM_ERROR
1849
- #ifdef _WIN32
1850
- stderr_last_error ("Can't initialize heap" );
1851
- #else
1852
- fprintf (stderr , "\nCan't initialize heap: [%d] %s\n" , errno , strerror (errno ));
1853
- #endif
1854
+ fprintf (stderr , "\nCan't initialize heap\n" );
1854
1855
#endif
1855
1856
return NULL ;
1856
1857
}
@@ -2978,11 +2979,7 @@ ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_handlers *handlers, void
2978
2979
chunk = (zend_mm_chunk * )handlers -> chunk_alloc (& tmp_storage , ZEND_MM_CHUNK_SIZE , ZEND_MM_CHUNK_SIZE );
2979
2980
if (UNEXPECTED (chunk == NULL )) {
2980
2981
#if ZEND_MM_ERROR
2981
- #ifdef _WIN32
2982
- stderr_last_error ("Can't initialize heap" );
2983
- #else
2984
- fprintf (stderr , "\nCan't initialize heap: [%d] %s\n" , errno , strerror (errno ));
2985
- #endif
2982
+ fprintf (stderr , "\nCan't initialize heap\n" );
2986
2983
#endif
2987
2984
return NULL ;
2988
2985
}
@@ -3025,11 +3022,7 @@ ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_handlers *handlers, void
3025
3022
if (!storage ) {
3026
3023
handlers -> chunk_free (& tmp_storage , chunk , ZEND_MM_CHUNK_SIZE );
3027
3024
#if ZEND_MM_ERROR
3028
- #ifdef _WIN32
3029
- stderr_last_error ("Can't initialize heap" );
3030
- #else
3031
- fprintf (stderr , "\nCan't initialize heap: [%d] %s\n" , errno , strerror (errno ));
3032
- #endif
3025
+ fprintf (stderr , "\nCan't initialize heap\n" );
3033
3026
#endif
3034
3027
return NULL ;
3035
3028
}
0 commit comments