File bnc-449905-crash-on-start-up1.diff of Package evolution-mono-providers

commit 7e0ad30bad8afc71ad3c9972d8c1bd3b109337e5
Author: chenthill <chen@rocky.blr.novell.com>
Date:   Fri Dec 5 05:46:09 2008 +0530

    Fixes a dead lock.
    Added some debug statements.

diff --git a/calendar/backends/sharepoint/BackGroundWorker.cs b/calendar/backends/sharepoint/BackGroundWorker.cs
index 230782c..f413b7a 100644
--- a/calendar/backends/sharepoint/BackGroundWorker.cs
+++ b/calendar/backends/sharepoint/BackGroundWorker.cs
@@ -15,7 +15,7 @@ namespace SharePoint
 		private bool running;
 		private bool shutdown;
 		private Thread backgroundThread;
-		private static readonly string locker = "lckr";
+		private readonly string locker;
 
 
 		private CalComponent [] GetEventChanges (ref string timestamp, ref string [] ids)
@@ -73,6 +73,7 @@ namespace SharePoint
 			shutdown = false;
 			running = false;
 			backgroundThread = null;
+			locker = "lcr";
 			backgroundEvent =  new ManualResetEvent (false);
 		}
 
@@ -216,8 +217,10 @@ namespace SharePoint
 			
 			if (backgroundThread == null)
 			{
+				Console.WriteLine ("Starting thread");
 				lock (locker)
 				{
+					Console.WriteLine ("Creating thread");
 					if (backgroundThread == null)
 					{
 						backgroundThread = new Thread (new ThreadStart (BackgroundWorkerThread));
diff --git a/calendar/backends/sharepoint/DaemonConnection.cs b/calendar/backends/sharepoint/DaemonConnection.cs
index 93e5c85..d4f1fd9 100644
--- a/calendar/backends/sharepoint/DaemonConnection.cs
+++ b/calendar/backends/sharepoint/DaemonConnection.cs
@@ -72,6 +72,7 @@ namespace SharePoint
 					// TODO: What should the Navigator do if the ICEcore Daemon suddenly exits?
 					Console.WriteLine ("TODO: What should the Navigator do if the ICEcore Daemon suddenly exits?");
 				} else {
+					Console.WriteLine ("Connecting to daemon again ");
 					// Connect to the new instance of the daemon
 					ConnectToICEcoreDaemon ();
 				}
diff --git a/calendar/backends/sharepoint/Sharepoint.cs b/calendar/backends/sharepoint/Sharepoint.cs
index b562655..0b4a3e7 100644
--- a/calendar/backends/sharepoint/Sharepoint.cs
+++ b/calendar/backends/sharepoint/Sharepoint.cs
@@ -16,6 +16,7 @@ namespace SharePoint {
 		private bool loaded;
 		Icaltimezone defaultZone;
 		static readonly string baseUri = "sharepoint://";
+		static readonly string olocker = "lckr";
 		
 		#endregion
 
@@ -25,8 +26,6 @@ namespace SharePoint {
 		public CalBackendCache cache;
 		public CalMode mode;
 		public CalBackend backend;
-		static string clocker = "lckr";
-		public readonly string locker = "lckr";
 		public string hostUrl;
 		public string workspaceid;
 		public string folderid;
@@ -79,11 +78,14 @@ namespace SharePoint {
 		
 		public BackendStatus BackendOpen (IntPtr raw, bool if_exists, string username, string password)
 		{
-			
-				if (loaded == true)
-					return BackendStatus.Success;
-
 
+			if (loaded == true)
+					return BackendStatus.Success;
+		
+			// There seems to a race condition while marshalling CalBackend. Needs to be debugged. I am not sure if gtk-sharp is thread safe. Needs more debugging.	
+			lock (olocker)
+			{
+				
 				if (mode == CalMode.Remote)
 				{
 					try
@@ -126,8 +128,6 @@ namespace SharePoint {
 				backend = new CalBackend (raw);
 				if (backend == null)
 					return BackendStatus.OtherError;
-			
-				GC.KeepAlive (backend);
 				
 				Evolution.Source source = backend.Source;
 				string user = source.GetSourceProperty ("username");
@@ -149,6 +149,7 @@ namespace SharePoint {
 						absBackend = new SharePoint.SharePointTaskBackend (this);
 				
 				loaded = true;
+			}
 			
 			return BackendStatus.Success;
 		}
@@ -307,7 +308,7 @@ namespace SharePoint {
 
 		public void BackendStartQuery (IntPtr query, string sexp)
 		{
-			
+			Console.WriteLine ("In Base start query ");
 			try {
 				absBackend.BackendStartQuery (query, sexp);
 			} catch (Exception ex)
diff --git a/calendar/backends/sharepoint/SharepointCal.cs b/calendar/backends/sharepoint/SharepointCal.cs
index 8f0d842..03137b3 100644
--- a/calendar/backends/sharepoint/SharepointCal.cs
+++ b/calendar/backends/sharepoint/SharepointCal.cs
@@ -20,6 +20,7 @@ namespace SharePoint
 			if (bgw.Running == false)
 						bgw.Start (60);
 
+			Console.WriteLine ("Query started " + sexp);
 			string [] comps = BackendGetObjectList (sexp);
 			
 			GLib.List objects = new GLib.List (null);
@@ -29,6 +30,7 @@ namespace SharePoint
 			}
 			
 			spBackend.backend.NotifyObjectsAdded (query, objects);
+			Console.WriteLine ("Query ended " + sexp);
 		}
 
 		public override string[] BackendGetObjectList (string sexp)
@@ -40,7 +42,6 @@ namespace SharePoint
 	
 			foreach (CalComponent comp in comps)
 			{
-				Console.WriteLine (comp.GetAsString ());
 				if (backendSexp.MatchObject (comp, spBackend.backend))
 				    compList.Add (comp.GetAsString ());
 			}
diff --git a/calendar/backends/sharepoint/sharepoint.userprefs b/calendar/backends/sharepoint/sharepoint.userprefs
index fc3b2c8..4b20245 100644
--- a/calendar/backends/sharepoint/sharepoint.userprefs
+++ b/calendar/backends/sharepoint/sharepoint.userprefs
@@ -1,20 +1,20 @@
 <Properties>
-  <MonoDevelop.Ide.Workbench ActiveDocument="ComponentEntry.cs" ctype="Workbench">
+  <MonoDevelop.Ide.Workbench ActiveDocument="Sharepoint.cs" ctype="Workbench">
     <Files>
       <File FileName="Welcome" />
       <File FileName="SharepointTask.cs" Line="104" Column="72" />
-      <File FileName="SharepointCal.cs" Line="43" Column="45" />
-      <File FileName="Sharepoint.cs" Line="369" Column="62" />
+      <File FileName="SharepointCal.cs" Line="31" Column="57" />
       <File FileName="DaemonConnection.cs" Line="6" Column="21" />
       <File FileName="ComponentEntry.cs" Line="145" Column="55" />
       <File FileName="BackGroundWorker.cs" Line="131" Column="1" />
+      <File FileName="Sharepoint.cs" Line="86" Column="6" />
     </Files>
     <Pads>
       <Pad Id="ProjectPad">
         <State expanded="True">
           <Node name="sharepoint" expanded="True">
             <Node name="References" expanded="True" />
-            <Node name="ComponentEntry.cs" selected="True" />
+            <Node name="Sharepoint.cs" selected="True" />
           </Node>
         </State>
       </Pad>
openSUSE Build Service is sponsored by