File tree Expand file tree Collapse file tree 2 files changed +9
-11
lines changed Expand file tree Collapse file tree 2 files changed +9
-11
lines changed Original file line number Diff line number Diff line change @@ -32,7 +32,7 @@ struct Maps {
32
32
_Atomic (uintptr_t ) freed ;
33
33
size_t count ;
34
34
size_t pages ;
35
- _Atomic ( char * ) pick ;
35
+ char * pick ;
36
36
struct Map stack ;
37
37
struct Map guard ;
38
38
};
@@ -49,7 +49,6 @@ bool __maps_lock(void);
49
49
void __maps_check (void );
50
50
void __maps_unlock (void );
51
51
void * __maps_randaddr (void );
52
- void * __maps_pickaddr (size_t );
53
52
void __maps_add (struct Map * );
54
53
void __maps_free (struct Map * );
55
54
void __maps_insert (struct Map * );
Original file line number Diff line number Diff line change @@ -411,22 +411,21 @@ void *__maps_randaddr(void) {
411
411
return (void * )addr ;
412
412
}
413
413
414
- void * __maps_pickaddr (size_t size ) {
414
+ static void * __maps_pickaddr (size_t size ) {
415
415
char * addr ;
416
+ __maps_lock ();
416
417
for (int try = 0 ; try < MAX_TRIES ; ++ try ) {
417
- addr = atomic_exchange_explicit (& __maps .pick , 0 , memory_order_acq_rel );
418
+ addr = __maps .pick ;
419
+ __maps .pick = 0 ;
418
420
if (!addr )
419
421
addr = __maps_randaddr ();
420
- __maps_lock ();
421
- bool overlaps = __maps_overlaps (addr , size , __pagesize );
422
- __maps_unlock ();
423
- if (!overlaps ) {
424
- atomic_store_explicit (& __maps .pick ,
425
- addr + ((size + __gransize - 1 ) & __gransize ),
426
- memory_order_release );
422
+ if (!__maps_overlaps (addr , size , __pagesize )) {
423
+ __maps .pick = addr + ((size + __gransize - 1 ) & __gransize );
424
+ __maps_unlock ();
427
425
return addr ;
428
426
}
429
427
}
428
+ __maps_unlock ();
430
429
return 0 ;
431
430
}
432
431
You can’t perform that action at this time.
0 commit comments