From ff4d8d0fbe1feb59a8799632af047771a78f1718 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 7 Mar 2018 18:17:23 +0100 Subject: [PATCH] Use C11's atomic_flag. --- src/xbt/mallocator.c | 8 ++++---- src/xbt/mallocator_private.h | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/xbt/mallocator.c b/src/xbt/mallocator.c index ec32f179c5..f12abcd3a9 100644 --- a/src/xbt/mallocator.c +++ b/src/xbt/mallocator.c @@ -1,6 +1,6 @@ /* mallocator - recycle objects to avoid malloc() / free() */ -/* Copyright (c) 2006-2017. The SimGrid Team. +/* Copyright (c) 2006-2018. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -40,13 +40,13 @@ static int initialization_done = 0; static inline void lock_reset(xbt_mallocator_t m) { - m->lock = 0; + atomic_flag_clear(&m->lock); } static inline void lock_acquire(xbt_mallocator_t m) { if (initialization_done > 1) { - while (__atomic_test_and_set(&m->lock, __ATOMIC_ACQUIRE)) + while (atomic_flag_test_and_set(&m->lock)) /* nop */; } } @@ -54,7 +54,7 @@ static inline void lock_acquire(xbt_mallocator_t m) static inline void lock_release(xbt_mallocator_t m) { if (initialization_done > 1) - __atomic_clear(&m->lock, __ATOMIC_RELEASE); + atomic_flag_clear(&m->lock); } /** diff --git a/src/xbt/mallocator_private.h b/src/xbt/mallocator_private.h index ccd5b5237d..90b5f8800d 100644 --- a/src/xbt/mallocator_private.h +++ b/src/xbt/mallocator_private.h @@ -1,6 +1,6 @@ /* mallocator - recycle objects to avoid malloc() / free() */ -/* Copyright (c) 2006-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -8,6 +8,7 @@ #ifndef XBT_MALLOCATOR_PRIVATE_H #define XBT_MALLOCATOR_PRIVATE_H +#include #include typedef struct s_xbt_mallocator { @@ -17,7 +18,7 @@ typedef struct s_xbt_mallocator { pvoid_f_void_t new_f; /* function to call when we are running out of objects */ void_f_pvoid_t free_f; /* function to call when we have got too many objects */ void_f_pvoid_t reset_f; /* function to call when an object is released by the user */ - char lock; /* lock to ensure the mallocator is thread-safe */ + atomic_flag lock; /* lock to ensure the mallocator is thread-safe */ } s_xbt_mallocator_t; #endif -- 2.20.1