@@ -443,18 +443,17 @@ int _mi_prim_reuse(void* start, size_t size) {
443
443
444
444
int _mi_prim_decommit (void * start , size_t size , bool * needs_recommit ) {
445
445
int err = 0 ;
446
- #if !MI_DEBUG && MI_SECURE <=2
447
- * needs_recommit = false;
448
- #if defined(__APPLE__ ) && defined(MADV_FREE_REUSABLE )
446
+ #if defined(__APPLE__ ) && defined(MADV_FREE_REUSABLE )
449
447
// decommit on macOS: use MADV_FREE_REUSABLE as it does immediate rss accounting (issue #1097)
450
448
err = unix_madvise (start , size , MADV_FREE_REUSABLE );
451
- #else
449
+ if (err ) { err = unix_madvise (start , size , MADV_DONTNEED ); }
450
+ #else
452
451
// decommit: use MADV_DONTNEED as it decreases rss immediately (unlike MADV_FREE)
453
452
err = unix_madvise (start , size , MADV_DONTNEED );
454
- #endif
453
+ #endif
454
+ #if !MI_DEBUG && MI_SECURE <=2
455
+ * needs_recommit = false;
455
456
#else
456
- // note: don't use MADV_FREE_REUSABLE as the range may contain protected areas
457
- err = unix_madvise (start , size , MADV_DONTNEED );
458
457
* needs_recommit = true;
459
458
mprotect (start , size , PROT_NONE );
460
459
#endif
@@ -470,10 +469,11 @@ int _mi_prim_decommit(void* start, size_t size, bool* needs_recommit) {
470
469
471
470
int _mi_prim_reset (void * start , size_t size ) {
472
471
int err = 0 ;
473
- #if defined(__APPLE__ ) && defined(MADV_FREE_REUSABLE )
474
- // on macOS we try to use MADV_FREE_REUSABLE as it seems the fastest
472
+
473
+ // on macOS can use MADV_FREE_REUSABLE (but we disable this for now as it seems slower)
474
+ #if 0 && defined(__APPLE__ ) && defined(MADV_FREE_REUSABLE )
475
475
err = unix_madvise (start , size , MADV_FREE_REUSABLE );
476
- if (err == 0 ) return 0 ;
476
+ if (err == 0 ) return 0 ;
477
477
// fall through
478
478
#endif
479
479
0 commit comments