Add SIGTERM support to -runWithOptions:error:

This commit is contained in:
Pierre-Olivier Latour 2014-04-29 16:20:03 -07:00
parent 3b75f9dd20
commit 420ed719e8
2 changed files with 8 additions and 6 deletions

View File

@ -351,9 +351,9 @@ extern NSString* const GCDWebServerAuthenticationMethod_DigestAccess;
- (BOOL)runWithPort:(NSUInteger)port bonjourName:(NSString*)name;
/**
* Runs the server synchronously using -startWithOptions: until a SIGINT signal
* is received i.e. Ctrl-C. This method is intended to be used by command line
* tools.
* Runs the server synchronously using -startWithOptions: until a SIGTERM or
* SIGINT signal is received i.e. Ctrl-C in Terminal. This method is intended to
* be used by command line tools.
*
* Returns NO if the server failed to start and sets "error" argument if not NULL.
*

View File

@ -668,8 +668,9 @@ static inline NSString* _EncodeBase64(NSString* string) {
DCHECK([NSThread isMainThread]);
BOOL success = NO;
_run = YES;
void (*handler)(int) = signal(SIGINT, _SignalHandler);
if (handler != SIG_ERR) {
void (*termHandler)(int) = signal(SIGTERM, _SignalHandler);
void (*intHandler)(int) = signal(SIGINT, _SignalHandler);
if ((termHandler != SIG_ERR) && (intHandler != SIG_ERR)) {
if ([self startWithOptions:options error:error]) {
while (_run) {
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0, true);
@ -677,7 +678,8 @@ static inline NSString* _EncodeBase64(NSString* string) {
[self stop];
success = YES;
}
signal(SIGINT, handler);
signal(SIGINT, intHandler);
signal(SIGTERM, termHandler);
}
return success;
}