As noted by a FIXME in the code, the new IndexHelper process does not terminate when beagle recieves a shutdown signal. This patch sets up a Quit signal for the IndexHelper process, which is called on shutdown. If this looks ok then I'll work on making Quit and NewRemoteIndexerPath only accept calls from the parent process. Index: beagled/IndexHelperFu.cs =================================================================== RCS file: /cvs/gnome/beagle/beagled/IndexHelperFu.cs,v retrieving revision 1.2 diff -u -b -B -r1.2 IndexHelperFu.cs --- beagled/IndexHelperFu.cs 11 Feb 2005 20:58:25 -0000 1.2 +++ beagled/IndexHelperFu.cs 13 Feb 2005 01:46:27 -0000 @@ -140,7 +140,18 @@ bus_driver.ServiceOwnerChanged -= OnNameOwnerChanged; #endif - // FIXME: Shut down the helper process + Logger.Log.Debug ("Ending IndexHelper process..."); + try { + RemoteIndexerProxy factory; + factory = index_helper_service.GetObject (typeof (RemoteIndexerProxy), + index_helper_factory_path) as RemoteIndexerProxy; + factory.Quit (); + current_helper.WaitForExit (); + Logger.Log.Debug ("IndexHelper exited successfully."); + } catch (Exception ex) { + Logger.Log.Error ("Failed to send signal to IndexHelper, killing..."); + current_helper.Kill (); + } } private class GetProxyClosure { Index: beagled/RemoteIndexerProxy.cs =================================================================== RCS file: /cvs/gnome/beagle/beagled/RemoteIndexerProxy.cs,v retrieving revision 1.2 diff -u -b -B -r1.2 RemoteIndexerProxy.cs --- beagled/RemoteIndexerProxy.cs 11 Feb 2005 20:58:25 -0000 1.2 +++ beagled/RemoteIndexerProxy.cs 13 Feb 2005 01:46:27 -0000 @@ -36,6 +36,9 @@ public abstract string NewRemoteIndexerPath (string name); [Method] + public abstract void Quit (); + + [Method] public abstract bool Open (); [Method] Index: beagled/IndexHelper/IndexHelper.cs =================================================================== RCS file: /cvs/gnome/beagle/beagled/IndexHelper/IndexHelper.cs,v retrieving revision 1.2 diff -u -b -B -r1.2 IndexHelper.cs --- beagled/IndexHelper/IndexHelper.cs 11 Feb 2005 20:58:25 -0000 1.2 +++ beagled/IndexHelper/IndexHelper.cs 13 Feb 2005 01:46:28 -0000 @@ -43,6 +43,11 @@ static readonly public string FactoryPath = "/com/novell/BeagleIndexHelper/Factory"; static readonly public string IndexPathPrefix = "/com/novell/BeagleIndexHelper/Index"; + static public void Quit () + { + Application.Quit (); + } + static void Main (string [] args) { Logger.DefaultEcho = true; @@ -87,6 +92,7 @@ th.Start (); Application.Run (); + Beagle.Daemon.DBusisms.UnregisterAll (); Environment.Exit (0); } Index: beagled/IndexHelper/RemoteIndexerImpl.cs =================================================================== RCS file: /cvs/gnome/beagle/beagled/IndexHelper/RemoteIndexerImpl.cs,v retrieving revision 1.2 diff -u -b -B -r1.2 RemoteIndexerImpl.cs --- beagled/IndexHelper/RemoteIndexerImpl.cs 11 Feb 2005 20:58:25 -0000 1.2 +++ beagled/IndexHelper/RemoteIndexerImpl.cs 13 Feb 2005 01:46:28 -0000 @@ -96,7 +96,7 @@ ///////////////////////////////////////////////////////////////////////////////////// - // FIXME: We should reject calls to NewRemoteIndexerPath from + // FIXME: We should reject calls to NewRemoteIndexerPath/Quit from // anyone except for the process that started us. static Hashtable remote_indexer_cache = new Hashtable (); @@ -111,6 +111,11 @@ Beagle.Daemon.DBusisms.RegisterObject (impl, path); } return path; + } + + override public void Quit () + { + IndexHelperTool.Quit (); } /////////////////////////////////////////////////////////////////////////////////////