Speed up realaunch

This commit is contained in:
Richard Frith-Macdonald 2019-02-11 16:17:16 +00:00
parent e7084020d4
commit 5dd11178b0
6 changed files with 47 additions and 17 deletions

View file

@ -1,3 +1,9 @@
2019-02-11 Richard Frith-Macdonald <rfm@gnu.org>
* EcCommand.m: Relaunch process more rapidly, turn off alarm coalesce.
* EcControl.m: Turn off alarm coalesce
* EcProcess.[hm]: Expose the alarm destination object.
2019-02-11 Wolfgang Lux <wolfgang.lux@gmail.com> 2019-02-11 Wolfgang Lux <wolfgang.lux@gmail.com>
* EcAlerter.m: Define Regex class as a simple wrapper around * EcAlerter.m: Define Regex class as a simple wrapper around

View file

@ -43,7 +43,7 @@
* Args = (array) The arguments supplied to the program * Args = (array) The arguments supplied to the program
* Auto = (boolean) Whether the program is started automatically * Auto = (boolean) Whether the program is started automatically
* Time = (integer) How many seconds after a crash until the * Time = (integer) How many seconds after a crash until the
* automatic restart (defaults to about 300) * automatic restart (defaults to 0; fast)
* AddE = (dictionary) key/value pairs added to the environment * AddE = (dictionary) key/value pairs added to the environment
* SetE = (dictionary) key/value pairs to be used as environment * SetE = (dictionary) key/value pairs to be used as environment
* KeepStandardInput = (boolean) Don't close stdin * KeepStandardInput = (boolean) Don't close stdin

View file

@ -237,6 +237,7 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
- (void) ecAwaken - (void) ecAwaken
{ {
[super ecAwaken]; [super ecAwaken];
[[self ecAlarmDestination] setCoalesce: NO];
launchSuspended = [[self cmdDefaults] boolForKey: @"LaunchStartSuspended"]; launchSuspended = [[self cmdDefaults] boolForKey: @"LaunchStartSuspended"];
[self _timedOut: nil]; // Simulate timeout to set timer going [self _timedOut: nil]; // Simulate timeout to set timer going
} }
@ -691,6 +692,12 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
userInfo: name userInfo: name
repeats: NO]; repeats: NO];
} }
else
{
[launches setObject: [NSDate distantPast]
forKey: name];
[self timeoutSoon];
}
} }
} }
@ -2481,7 +2488,9 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
&& [self findIn: clients byName: name] == nil && [self findIn: clients byName: name] == nil
&& [launching objectForKey: name] == nil) && [launching objectForKey: name] == nil)
{ {
[self launch: name]; [launches setObject: [NSDate distantPast]
forKey: name];
[self timeoutSoon];
} }
} }

View file

@ -1800,6 +1800,12 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
return self; return self;
} }
- (void) ecAwaken
{
[super ecAwaken];
[[self ecAlarmDestination] setCoalesce: NO];
}
- (int) ecRun - (int) ecRun
{ {
int result; int result;

View file

@ -524,6 +524,10 @@ extern NSString* cmdVersion(NSString *ver);
specificProblem: (NSString*)specificProblem specificProblem: (NSString*)specificProblem
additionalText: (NSString*)additionalText; additionalText: (NSString*)additionalText;
/** Returns the alarm destination for this process.
*/
- (EcAlarmDestination*) ecAlarmDestination;
/** Return a short copyright notice ... subclasses should override. /** Return a short copyright notice ... subclasses should override.
*/ */
- (NSString*) ecCopyright; - (NSString*) ecCopyright;

View file

@ -2334,6 +2334,11 @@ static NSString *noFiles = @"No log files to archive";
return cmdSignalled; return cmdSignalled;
} }
- (EcAlarmDestination*) ecAlarmDestination
{
return alarmDestination;
}
static BOOL ecDidAwaken = NO; static BOOL ecDidAwaken = NO;
- (void) ecAwaken - (void) ecAwaken
@ -2371,7 +2376,7 @@ static BOOL ecDidAwaken = NO;
_(@"Correct config (check additional text and/or log for details).") _(@"Correct config (check additional text and/or log for details).")
additionalText: err]; additionalText: err];
[self alarm: a]; [self alarm: a];
[alarmDestination shutdown]; [[self ecAlarmDestination] shutdown];
[self ecQuitFor: @"configuration error" with: 1]; [self ecQuitFor: @"configuration error" with: 1];
} }
else else
@ -2410,9 +2415,9 @@ static BOOL ecDidAwaken = NO;
{ {
/* Normal shutdown ... unmanage this process first. /* Normal shutdown ... unmanage this process first.
*/ */
[alarmDestination unmanage: nil]; [[self ecAlarmDestination] unmanage: nil];
} }
[alarmDestination shutdown]; [[self ecAlarmDestination] shutdown];
/* Almost done ... flush any logs then write the final audit log and /* Almost done ... flush any logs then write the final audit log and
* flush again (so that audit log should be the last in the file). * flush again (so that audit log should be the last in the file).
@ -2441,7 +2446,7 @@ static BOOL ecDidAwaken = NO;
/* Re-do the alarm destination shut down, just in case an alarm /* Re-do the alarm destination shut down, just in case an alarm
* occurred while we were flushing logs and/or unregistering. * occurred while we were flushing logs and/or unregistering.
*/ */
[alarmDestination shutdown]; [[self ecAlarmDestination] shutdown];
DESTROY(alarmDestination); DESTROY(alarmDestination);
/* Ensure our DO connection is invalidated so there will be no more /* Ensure our DO connection is invalidated so there will be no more
@ -2582,7 +2587,7 @@ static BOOL ecDidAwaken = NO;
- (oneway void) alarm: (in bycopy EcAlarm*)event - (oneway void) alarm: (in bycopy EcAlarm*)event
{ {
[alarmDestination alarm: event]; [[self ecAlarmDestination] alarm: event];
} }
- (EcAlarm*) alarmConfigurationFor: (NSString*)managedObject - (EcAlarm*) alarmConfigurationFor: (NSString*)managedObject
@ -2617,7 +2622,7 @@ static BOOL ecDidAwaken = NO;
- (NSArray*) alarms - (NSArray*) alarms
{ {
return [alarmDestination alarms]; return [[self ecAlarmDestination] alarms];
} }
- (void) clearConfigurationFor: (NSString*)managedObject - (void) clearConfigurationFor: (NSString*)managedObject
@ -2639,12 +2644,12 @@ static BOOL ecDidAwaken = NO;
- (oneway void) domanage: (in bycopy NSString*)managedObject - (oneway void) domanage: (in bycopy NSString*)managedObject
{ {
[alarmDestination domanage: managedObject]; [[self ecAlarmDestination] domanage: managedObject];
} }
- (oneway void) unmanage: (in bycopy NSString*)managedObject - (oneway void) unmanage: (in bycopy NSString*)managedObject
{ {
[alarmDestination unmanage: managedObject]; [[self ecAlarmDestination] unmanage: managedObject];
} }
- (int) processIdentifier - (int) processIdentifier
@ -2801,7 +2806,7 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
object: connection]; object: connection];
if (cmdServer != nil && connection == [cmdServer connectionForProxy]) if (cmdServer != nil && connection == [cmdServer connectionForProxy])
{ {
[alarmDestination setDestination: nil]; [[self ecAlarmDestination] setDestination: nil];
DESTROY(cmdServer); DESTROY(cmdServer);
NSLog(@"lost connection 0x%p to command server\n", connection); NSLog(@"lost connection 0x%p to command server\n", connection);
/* /*
@ -3138,7 +3143,7 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
{ {
alarmDestination = [EcAlarmDestination new]; alarmDestination = [EcAlarmDestination new];
} }
[alarmDestination setDestination: cmdServer]; [[self ecAlarmDestination] setDestination: cmdServer];
[[NSNotificationCenter defaultCenter] [[NSNotificationCenter defaultCenter]
addObserver: self addObserver: self
selector: @selector(cmdConnectionBecameInvalid:) selector: @selector(cmdConnectionBecameInvalid:)
@ -3383,7 +3388,7 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
_(@"Check for running copy of process and/or registration in gdomap.") _(@"Check for running copy of process and/or registration in gdomap.")
additionalText: _(@"Process probably already running (possibly hung/delayed) or problem in name registration with distributed objects system (gdomap)")]; additionalText: _(@"Process probably already running (possibly hung/delayed) or problem in name registration with distributed objects system (gdomap)")];
[self alarm: a]; [self alarm: a];
[alarmDestination shutdown]; [[self ecAlarmDestination] shutdown];
[self ecQuitFor: @"unable to register with name server" with: 2]; [self ecQuitFor: @"unable to register with name server" with: 2];
[self cmdFlushLogs]; [self cmdFlushLogs];
[arp release]; [arp release];
@ -3724,7 +3729,7 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
} }
else else
{ {
NSArray *a = [alarmDestination alarms]; NSArray *a = [[self ecAlarmDestination] alarms];
if (0 == [a count]) if (0 == [a count])
{ {
@ -3792,7 +3797,7 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
} }
else else
{ {
NSArray *a = [alarmDestination alarms]; NSArray *a = [[self ecAlarmDestination] alarms];
NSUInteger count = [msg count]; NSUInteger count = [msg count];
if (count < 2) if (count < 2)
@ -3821,7 +3826,7 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
alarm = [a objectAtIndex: i]; alarm = [a objectAtIndex: i];
[self cmdPrintf: @"Clearing %@\n", alarm]; [self cmdPrintf: @"Clearing %@\n", alarm];
alarm = [alarm clear]; alarm = [alarm clear];
[alarmDestination alarm: alarm]; [[self ecAlarmDestination] alarm: alarm];
} }
} }
else if (1 == sscanf([arg UTF8String], "%" PRIxPTR, &addr)) else if (1 == sscanf([arg UTF8String], "%" PRIxPTR, &addr))
@ -3848,7 +3853,7 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
{ {
[self cmdPrintf: @"Clearing %@\n", alarm]; [self cmdPrintf: @"Clearing %@\n", alarm];
alarm = [alarm clear]; alarm = [alarm clear];
[alarmDestination alarm: alarm]; [[self ecAlarmDestination] alarm: alarm];
} }
} }
else else