handle_eintr-inl.h 782 B

12345678910111213141516171819202122232425262728293031323334
  1. #ifndef HANDLE_EINTR_INL_H_
  2. #error "Direct inclusion of this file is not allowed, include handle_eintr.h"
  3. // For the sake of sane code completion.
  4. #include "handle_eintr.h"
  5. #endif
  6. #include <errno.h>
  7. namespace NYT {
  8. ////////////////////////////////////////////////////////////////////////////////
  9. #ifndef _win_
  10. template <class F, class... Args>
  11. auto HandleEintr(F f, Args&&... args) -> decltype(f(args...))
  12. {
  13. while (true) {
  14. auto x = f(args...);
  15. if (x != -1 || errno != EINTR) {
  16. return x;
  17. }
  18. }
  19. }
  20. #else
  21. template <class F, class... Args>
  22. auto HandleEintr(F f, Args&&... args) -> decltype(f(args...))
  23. {
  24. return f(args...);
  25. }
  26. #endif
  27. ////////////////////////////////////////////////////////////////////////////////
  28. } // namespace NYT