1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #ifndef BASE_POSIX_EINTR_WRAPPER_H_
- #define BASE_POSIX_EINTR_WRAPPER_H_
- #include "build/build_config.h"
- #if defined(OS_POSIX)
- #include <errno.h>
- #if defined(NDEBUG)
- #define HANDLE_EINTR(x) ({ \
- decltype(x) eintr_wrapper_result
- do { \
- eintr_wrapper_result = (x)
- } while (eintr_wrapper_result == -1 && errno == EINTR)
- eintr_wrapper_result
- })
- #else
- #define HANDLE_EINTR(x) ({ \
- int eintr_wrapper_counter = 0
- decltype(x) eintr_wrapper_result
- do { \
- eintr_wrapper_result = (x)
- } while (eintr_wrapper_result == -1 && errno == EINTR && \
- eintr_wrapper_counter++ < 100)
- eintr_wrapper_result
- })
- #endif
- #define IGNORE_EINTR(x) ({ \
- decltype(x) eintr_wrapper_result
- do { \
- eintr_wrapper_result = (x)
- if (eintr_wrapper_result == -1 && errno == EINTR) { \
- eintr_wrapper_result = 0
- } \
- } while (0)
- eintr_wrapper_result
- })
- #else
- #define HANDLE_EINTR(x) (x)
- #define IGNORE_EINTR(x) (x)
- #endif
- #endif
|