From d03afba739d727e51fec334b1a19ad62ce54db06 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 29 Mar 2016 10:32:10 -0400 Subject: [PATCH] (fix) handle EAS termination when SOGo is being shutdown (fixes #3604) --- ActiveSync/SOGoActiveSyncDispatcher+Sync.m | 5 ++++- ActiveSync/SOGoActiveSyncDispatcher.h | 3 ++- ActiveSync/SOGoActiveSyncDispatcher.m | 17 ++++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m index 8859847db..a26430a57 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m +++ b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m @@ -1867,6 +1867,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // We enter our loop detection change for (i = 0; i < (heartbeatInterval/internalInterval); i++) { + if (shouldTerminate) + break; + s = [NSMutableString string]; for (j = 0; j < [allCollections count]; j++) @@ -1906,7 +1909,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. { total_sleep = 0; - while (total_sleep < internalInterval) + while (!shouldTerminate && total_sleep < internalInterval) { // We check if we must break the current synchronization since an other Sync // has just arrived. diff --git a/ActiveSync/SOGoActiveSyncDispatcher.h b/ActiveSync/SOGoActiveSyncDispatcher.h index d4de4f985..7035e8906 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.h +++ b/ActiveSync/SOGoActiveSyncDispatcher.h @@ -38,6 +38,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @class NSURL; @class NSNumber; +static volatile BOOL shouldTerminate = NO; + @interface SOGoActiveSyncDispatcher : NSObject { NSURL *folderTableURL; @@ -45,7 +47,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. id context; NSNumber *syncRequest; - BOOL debugOn; } diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index 5f0487095..8c40d520d 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -40,6 +40,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #import #import #import +#import #import @@ -121,6 +122,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #endif +void handle_terminate(int signum) +{ + NSLog(@"Forcing termination of EAS loop."); + shouldTerminate = YES; + [[WOCoreApplication application] terminateAfterTimeInterval: 1]; +} + @interface SOGoActiveSyncDispatcher (Sync) - (NSMutableDictionary *) _folderMetadataForKey: (NSString *) theFolderKey; @@ -138,6 +146,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. folderTableURL = nil; imapFolderGUIDS = nil; syncRequest = nil; + + shouldTerminate = NO; + signal(SIGTERM, handle_terminate); + return self; } @@ -2099,6 +2111,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // We enter our loop detection change for (i = 0; i < (heartbeatInterval/internalInterval); i++) { + if (shouldTerminate) + break; + pool = [[NSAutoreleasePool alloc] init]; for (j = 0; j < [allFoldersID count]; j++) { @@ -2136,7 +2151,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. { total_sleep = 0; - while (total_sleep < internalInterval) + while (!shouldTerminate && total_sleep < internalInterval) { // We check if we must break the current ping request since an other ping request // has just arrived.