#ifndef UCS_ASYNC_SIGNAL_H
#define UCS_ASYNC_SIGNAL_H
#include <ucs/datastruct/list.h>
#include <ucs/type/status.h>
#include <ucs/sys/sys.h>
#include <pthread.h>
typedef struct ucs_async_signal_context {
pid_t tid;
int block_count;
pthread_t pthread;
timer_t timer;
} ucs_async_signal_context_t;
#define UCS_ASYNC_SIGNAL_BLOCK(_async) \
{ \
ucs_assert((_async)->signal.tid == ucs_get_tid()); \
++(_async)->signal.block_count; \
ucs_memory_cpu_fence(); \
}
#define UCS_ASYNC_SIGNAL_UNBLOCK(_async) \
{ \
ucs_memory_cpu_fence(); \
--(_async)->signal.block_count; \
}
#define UCS_ASYNC_SIGNAL_IS_RECURSIVELY_BLOCKED(_async) \
(((_async)->signal.block_count > 0) && \
((_async)->signal.tid == ucs_get_tid()))
#endif