about summary refs log tree commit diff
path: root/frida_mode/src/seccomp/seccomp_atomic.c
blob: 18cb67241f5d98db9a613f01e1b9c80e430bb42d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#if defined(__linux__) && !defined(__ANDROID__)

  #include <stdbool.h>
  #include <stdio.h>

  #include "util.h"

void seccomp_atomic_set(volatile bool *ptr, bool val) {

  if (!__sync_bool_compare_and_swap(ptr, !val, val)) {

    FFATAL("Failed to set event");

  }

}

bool seccomp_atomic_try_set(volatile bool *ptr, bool val) {

  return __sync_bool_compare_and_swap(ptr, !val, val);

}

void seccomp_atomic_wait(volatile bool *ptr, bool val) {

  while (!__sync_bool_compare_and_swap(ptr, val, !val))
    ;

}

#endif