@@ -2745,9 +2745,9 @@ static void accel_move_code_to_huge_pages(void)
2745
2745
size_t s = 0 ;
2746
2746
int mib [4 ] = {CTL_KERN , KERN_PROC , KERN_PROC_VMMAP , getpid ()};
2747
2747
long unsigned int huge_page_size = 2 * 1024 * 1024 ;
2748
- if (sysctl (mib , 4 , NULL , & s , NULL , 0 ) == 0 ) {
2748
+ if (sysctl (mib , 4 , NULL , & s , NULL , 0 ) == 0 ) {
2749
2749
s = s * 4 / 3 ;
2750
- void * addr = mmap (NULL , s * sizeof ( struct kinfo_vmentry ) , PROT_READ | PROT_WRITE , MAP_SHARED | MAP_ANON , -1 , 0 );
2750
+ void * addr = mmap (NULL , s , PROT_READ | PROT_WRITE , MAP_SHARED | MAP_ANON , -1 , 0 );
2751
2751
if (addr != MAP_FAILED ) {
2752
2752
if (sysctl (mib , 4 , addr , & s , NULL , 0 ) == 0 ) {
2753
2753
uintptr_t start = (uintptr_t )addr ;
@@ -2766,11 +2766,14 @@ static void accel_move_code_to_huge_pages(void)
2766
2766
if (seg_end > seg_start ) {
2767
2767
zend_accel_error (ACCEL_LOG_DEBUG , "remap to huge page %lx-%lx %s \n" , seg_start , seg_end , entry -> kve_path );
2768
2768
accel_remap_huge_pages ((void * )seg_start , seg_end - seg_start , seg_end - seg_start , entry -> kve_path , entry -> kve_offset + seg_start - start );
2769
+ // First relevant segment found is our binary
2770
+ break ;
2769
2771
}
2770
2772
}
2771
2773
start += sz ;
2772
2774
}
2773
2775
}
2776
+ munmap (addr , s );
2774
2777
}
2775
2778
}
2776
2779
#endif
0 commit comments