comparison Orthanc/Core/Toolbox.cpp @ 134:d73006baca3f

sync
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 13 Jun 2016 10:27:52 +0200
parents 2c73a785c08e
children 9362080e5e3d
comparison
equal deleted inserted replaced
133:3251ec958a29 134:d73006baca3f
109 #endif 109 #endif
110 110
111 111
112 namespace Orthanc 112 namespace Orthanc
113 { 113 {
114 static bool finish; 114 static bool finish_;
115 static ServerBarrierEvent barrierEvent_;
115 116
116 #if defined(_WIN32) 117 #if defined(_WIN32)
117 static BOOL WINAPI ConsoleControlHandler(DWORD dwCtrlType) 118 static BOOL WINAPI ConsoleControlHandler(DWORD dwCtrlType)
118 { 119 {
119 // http://msdn.microsoft.com/en-us/library/ms683242(v=vs.85).aspx 120 // http://msdn.microsoft.com/en-us/library/ms683242(v=vs.85).aspx
120 finish = true; 121 finish_ = true;
121 return true; 122 return true;
122 } 123 }
123 #else 124 #else
124 static void SignalHandler(int) 125 static void SignalHandler(int signal)
125 { 126 {
126 finish = true; 127 if (signal == SIGHUP)
128 {
129 barrierEvent_ = ServerBarrierEvent_Reload;
130 }
131
132 finish_ = true;
127 } 133 }
128 #endif 134 #endif
129 135
130 136
131 void Toolbox::USleep(uint64_t microSeconds) 137 void Toolbox::USleep(uint64_t microSeconds)
138 #error Support your platform here 144 #error Support your platform here
139 #endif 145 #endif
140 } 146 }
141 147
142 148
143 static void ServerBarrierInternal(const bool* stopFlag) 149 static ServerBarrierEvent ServerBarrierInternal(const bool* stopFlag)
144 { 150 {
145 #if defined(_WIN32) 151 #if defined(_WIN32)
146 SetConsoleCtrlHandler(ConsoleControlHandler, true); 152 SetConsoleCtrlHandler(ConsoleControlHandler, true);
147 #else 153 #else
148 signal(SIGINT, SignalHandler); 154 signal(SIGINT, SignalHandler);
149 signal(SIGQUIT, SignalHandler); 155 signal(SIGQUIT, SignalHandler);
150 signal(SIGTERM, SignalHandler); 156 signal(SIGTERM, SignalHandler);
157 signal(SIGHUP, SignalHandler);
151 #endif 158 #endif
152 159
153 // Active loop that awakens every 100ms 160 // Active loop that awakens every 100ms
154 finish = false; 161 finish_ = false;
155 while (!(*stopFlag || finish)) 162 barrierEvent_ = ServerBarrierEvent_Stop;
163 while (!(*stopFlag || finish_))
156 { 164 {
157 Toolbox::USleep(100 * 1000); 165 Toolbox::USleep(100 * 1000);
158 } 166 }
159 167
160 #if defined(_WIN32) 168 #if defined(_WIN32)
161 SetConsoleCtrlHandler(ConsoleControlHandler, false); 169 SetConsoleCtrlHandler(ConsoleControlHandler, false);
162 #else 170 #else
163 signal(SIGINT, NULL); 171 signal(SIGINT, NULL);
164 signal(SIGQUIT, NULL); 172 signal(SIGQUIT, NULL);
165 signal(SIGTERM, NULL); 173 signal(SIGTERM, NULL);
166 #endif 174 signal(SIGHUP, NULL);
167 } 175 #endif
168 176
169 177 return barrierEvent_;
170 void Toolbox::ServerBarrier(const bool& stopFlag) 178 }
171 { 179
172 ServerBarrierInternal(&stopFlag); 180
173 } 181 ServerBarrierEvent Toolbox::ServerBarrier(const bool& stopFlag)
174 182 {
175 void Toolbox::ServerBarrier() 183 return ServerBarrierInternal(&stopFlag);
184 }
185
186 ServerBarrierEvent Toolbox::ServerBarrier()
176 { 187 {
177 const bool stopFlag = false; 188 const bool stopFlag = false;
178 ServerBarrierInternal(&stopFlag); 189 return ServerBarrierInternal(&stopFlag);
179 } 190 }
180 191
181 192
182 void Toolbox::ToUpperCase(std::string& s) 193 void Toolbox::ToUpperCase(std::string& s)
183 { 194 {