2003-01-27 Padraig O'Briain <padraig.obriain@sun.com
[platform/core/uifw/at-spi2-atk.git] / cspi / spi_main.c
index fbaa867..5117486 100644 (file)
@@ -126,6 +126,7 @@ cspi_get_live_refs (void)
 CORBA_Environment *
 cspi_ev (void)
 {
+  CORBA_exception_init (&ev);
   return &ev;
 }
 
@@ -243,6 +244,27 @@ cspi_object_return (Accessible *accessible)
     }
 }
 
+Accessible *
+cspi_object_take (CORBA_Object corba_object)
+{
+  Accessible *accessible;
+  accessible = cspi_object_borrow (corba_object);
+
+  cspi_object_ref (accessible);
+  /* 
+   * if the remote object is dead, 
+   * cspi_object_return will throw an exception. 
+   * FIXME: what clears that exception context ever ?
+   */
+  cspi_object_return (accessible);
+  if (cspi_exception ()) 
+    {
+      cspi_object_unref (accessible);
+      accessible = NULL;
+    }
+  return accessible;
+}
+
 void
 cspi_object_ref (Accessible *accessible)
 {
@@ -392,8 +414,8 @@ report_leaked_ref (gpointer key, gpointer val, gpointer user_data)
       role = NULL;
     }
 
-  fprintf (stderr, "leaked %d references to object %s, role %s\n",
-          a->ref_count, name ? name : "<?>", role ? role : "<?>");
+  fprintf (stderr, "leaked %d references to object %s, role %s %p\n",
+          a->ref_count, name ? name : "<?>", role ? role : "<?>", a);
 
   SPI_freeString (name);
 }