From 44d8b63136edda0944687c985b5dfc1203fc875d 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) Conflicts: ActiveSync/SOGoActiveSyncDispatcher.m --- 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 db1b787c1..4d3e01d42 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m +++ b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m @@ -1905,6 +1905,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++) @@ -1944,7 +1947,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 76b4acbe7..4b8937e0f 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.h +++ b/ActiveSync/SOGoActiveSyncDispatcher.h @@ -37,6 +37,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; @@ -44,7 +46,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 d69a09452..dac03186f 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -52,6 +52,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #import #import #import +#import #import #import @@ -144,6 +145,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; @@ -161,6 +169,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; } @@ -2098,6 +2110,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++) { @@ -2135,7 +2150,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.