@@ -416,36 +416,22 @@ stderr_last_error(char *msg)
416
416
/* OS Allocation */
417
417
/*****************/
418
418
419
- #ifndef HAVE_MREMAP
420
- static void * zend_mm_mmap_fixed (void * addr , size_t size )
419
+ static void zend_mm_munmap (void * addr , size_t size )
421
420
{
422
421
#ifdef _WIN32
423
- return VirtualAlloc (addr , size , MEM_COMMIT | MEM_RESERVE , PAGE_READWRITE );
424
- #else
425
- int flags = MAP_PRIVATE | MAP_ANON ;
426
- #if defined(MAP_EXCL )
427
- flags |= MAP_FIXED | MAP_EXCL ;
428
- #endif
429
- /* MAP_FIXED leads to discarding of the old mapping, so it can't be used. */
430
- void * ptr = mmap (addr , size , PROT_READ | PROT_WRITE , flags /*| MAP_POPULATE | MAP_HUGETLB*/ , ZEND_MM_FD , 0 );
431
-
432
- if (ptr == MAP_FAILED ) {
433
- #if ZEND_MM_ERROR && !defined(MAP_EXCL )
434
- fprintf (stderr , "\nmmap() failed: [%d] %s\n" , errno , strerror (errno ));
422
+ if (VirtualFree (addr , 0 , MEM_RELEASE ) == 0 ) {
423
+ #if ZEND_MM_ERROR
424
+ stderr_last_error ("VirtualFree() failed" );
435
425
#endif
436
- return NULL ;
437
- } else if ( ptr != addr ) {
438
- if (munmap (ptr , size ) != 0 ) {
426
+ }
427
+ # else
428
+ if (munmap (addr , size ) != 0 ) {
439
429
#if ZEND_MM_ERROR
440
- fprintf (stderr , "\nmunmap() failed: [%d] %s\n" , errno , strerror (errno ));
430
+ fprintf (stderr , "\nmunmap() failed: [%d] %s\n" , errno , strerror (errno ));
441
431
#endif
442
- }
443
- return NULL ;
444
432
}
445
- return ptr ;
446
433
#endif
447
434
}
448
- #endif
449
435
450
436
static void * zend_mm_mmap (size_t size )
451
437
{
@@ -483,22 +469,32 @@ static void *zend_mm_mmap(size_t size)
483
469
#endif
484
470
}
485
471
486
- static void zend_mm_munmap (void * addr , size_t size )
472
+ #ifndef HAVE_MREMAP
473
+ static void * zend_mm_mmap_fixed (void * addr , size_t size )
487
474
{
488
475
#ifdef _WIN32
489
- if (VirtualFree (addr , 0 , MEM_RELEASE ) == 0 ) {
490
- #if ZEND_MM_ERROR
491
- stderr_last_error ("VirtualFree() failed" );
492
- #endif
493
- }
476
+ return VirtualAlloc (addr , size , MEM_COMMIT | MEM_RESERVE , PAGE_READWRITE );
494
477
#else
495
- if (munmap (addr , size ) != 0 ) {
496
- #if ZEND_MM_ERROR
497
- fprintf (stderr , "\nmunmap() failed: [%d] %s\n" , errno , strerror (errno ));
478
+ int flags = MAP_PRIVATE | MAP_ANON ;
479
+ #if defined(MAP_EXCL )
480
+ flags |= MAP_FIXED | MAP_EXCL ;
481
+ #endif
482
+ /* MAP_FIXED leads to discarding of the old mapping, so it can't be used. */
483
+ void * ptr = mmap (addr , size , PROT_READ | PROT_WRITE , flags /*| MAP_POPULATE | MAP_HUGETLB*/ , ZEND_MM_FD , 0 );
484
+
485
+ if (ptr == MAP_FAILED ) {
486
+ #if ZEND_MM_ERROR && !defined(MAP_EXCL )
487
+ fprintf (stderr , "\nmmap() failed: [%d] %s\n" , errno , strerror (errno ));
498
488
#endif
489
+ return NULL ;
490
+ } else if (ptr != addr ) {
491
+ zend_mm_munmap (ptr , size );
492
+ return NULL ;
499
493
}
494
+ return ptr ;
500
495
#endif
501
496
}
497
+ #endif
502
498
503
499
/***********/
504
500
/* Bitmask */
@@ -668,14 +664,7 @@ static void *zend_mm_chunk_alloc_int(size_t size, size_t alignment)
668
664
669
665
if (ptr == NULL ) {
670
666
return NULL ;
671
- } else if (ZEND_MM_ALIGNED_OFFSET (ptr , alignment ) == 0 ) {
672
- #ifdef MADV_HUGEPAGE
673
- if (zend_mm_use_huge_pages ) {
674
- madvise (ptr , size , MADV_HUGEPAGE );
675
- }
676
- #endif
677
- return ptr ;
678
- } else {
667
+ } else if (ZEND_MM_ALIGNED_OFFSET (ptr , alignment ) != 0 ) {
679
668
size_t offset ;
680
669
681
670
/* chunk has to be aligned */
@@ -702,14 +691,16 @@ static void *zend_mm_chunk_alloc_int(size_t size, size_t alignment)
702
691
if (alignment > REAL_PAGE_SIZE ) {
703
692
zend_mm_munmap ((char * )ptr + size , alignment - REAL_PAGE_SIZE );
704
693
}
705
- # ifdef MADV_HUGEPAGE
706
- if (zend_mm_use_huge_pages ) {
707
- madvise (ptr , size , MADV_HUGEPAGE );
708
- }
709
- # endif
710
694
#endif
711
- return ptr ;
712
695
}
696
+
697
+ #ifdef MADV_HUGEPAGE
698
+ if (zend_mm_use_huge_pages ) {
699
+ madvise (ptr , size , MADV_HUGEPAGE );
700
+ }
701
+ #endif
702
+
703
+ return ptr ;
713
704
}
714
705
715
706
static void * zend_mm_chunk_alloc (zend_mm_heap * heap , size_t size , size_t alignment )
0 commit comments