+child restarting on its failure
authorshort <>
Sat, 7 Jun 2003 07:15:37 +0000 (07:15 +0000)
committershort <>
Sat, 7 Jun 2003 07:15:37 +0000 (07:15 +0000)
+object shutdown() functions as release() will not destroy() servants

src/libcaptive/sandbox/parent-Directory.c

index a21a9d6..bbc6fff 100644 (file)
@@ -1,5 +1,5 @@
 /* $Id$
- * CORBA/ORBit server side of Directory object of sandbox_parent()
+ * CORBA/ORBit client side of Directory object of sandbox_parent()
  * Copyright (C) 2003 Jan Kratochvil <project-captive@jankratochvil.net>
  * 
  * This program is free software; you can redistribute it and/or modify
 GnomeVFSResult captive_sandbox_parent_directory_new_open
                (CaptiveDirectoryObject *captive_directory_object,const gchar *pathname)
 {
+gboolean retried=FALSE;
+
        g_return_val_if_fail(captive_directory_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(captive_directory_object->dir_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
 
+retry:
        captive_directory_object->corba_Directory_object=Captive_Vfs_directory_new_open(
                        captive_directory_object->vfs->corba_Vfs_object,pathname,&captive_corba_ev);
 
+       if (!retried && captive_sandbox_parent_query_vfs_retry(&captive_corba_ev,captive_directory_object->vfs)) {
+               retried=TRUE;
+               goto retry;
+               }
+
        return captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev);
 }
 
@@ -45,22 +53,36 @@ GnomeVFSResult captive_sandbox_parent_directory_new_open
 GnomeVFSResult captive_sandbox_parent_directory_new_make
                (CaptiveDirectoryObject *captive_directory_object,const gchar *pathname,guint perm)
 {
+gboolean retried=FALSE;
+
        g_return_val_if_fail(captive_directory_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(captive_directory_object->dir_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
 
+retry:
        captive_directory_object->corba_Directory_object=Captive_Vfs_directory_new_make(
                        captive_directory_object->vfs->corba_Vfs_object,pathname,perm,&captive_corba_ev);
 
+       if (!retried && captive_sandbox_parent_query_vfs_retry(&captive_corba_ev,captive_directory_object->vfs)) {
+               retried=TRUE;
+               goto retry;
+               }
+
        return captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev);
 }
 
 
 GnomeVFSResult captive_sandbox_parent_directory_close(CaptiveDirectoryObject *captive_directory_object)
 {
+GnomeVFSResult r;
+
        g_return_val_if_fail(captive_directory_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(captive_directory_object->dir_Handle==NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
 
+       Captive_Directory_shutdown(captive_directory_object->corba_Directory_object,&captive_corba_ev);
+       if (GNOME_VFS_OK!=(r=captive_sandbox_parent_return_from_CORBA_Environment(&captive_corba_ev)))
+               return r;
+
        CORBA_Object_release((CORBA_Object)captive_directory_object->corba_Directory_object,&captive_corba_ev);
        captive_directory_object->corba_Directory_object=CORBA_OBJECT_NIL;