From e29a44362695a850a28c26062d216ff9cccf34df Mon Sep 17 00:00:00 2001
From: Eric Cano <Eric.Cano@cern.ch>
Date: Mon, 30 Apr 2018 16:19:52 +0200
Subject: [PATCH] Added support to EINTR error in main process.

This allows attaching a debugger to the main process.
---
 tapeserver/daemon/ProcessManager.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tapeserver/daemon/ProcessManager.cpp b/tapeserver/daemon/ProcessManager.cpp
index bf2bbe848a..64985df3f8 100644
--- a/tapeserver/daemon/ProcessManager.cpp
+++ b/tapeserver/daemon/ProcessManager.cpp
@@ -277,6 +277,8 @@ void ProcessManager::runEventLoop() {
   const int eventSlotCount = 5;
   ::epoll_event ee[eventSlotCount];
   int receivedEvents = ::epoll_wait(m_epollFd, ee, eventSlotCount, nextTimeoutMs);
+  // epoll_wait can get interrupted by signal (like while debugging). This is should not be treated as an error.
+  if (-1 == receivedEvents && EINTR == errno) receivedEvents = 0;
   cta::exception::Errnum::throwOnMinusOne(receivedEvents, 
       "In ProcessManager::run(): failed to ::epoll_wait()");
   for (int i=0; i< receivedEvents; i++) {
-- 
GitLab