]> rtime.felk.cvut.cz Git - frescor/forb.git/blobdiff - src/object.c
Added possibility invoking remote methods on forb_orb interfaces
[frescor/forb.git] / src / object.c
index 73c88c5cd9659be519adbd7db5f4871717da61de..db46277bafe60fb0f86774e642b6a8f99ab2e8ca 100644 (file)
@@ -73,8 +73,8 @@ GAVL_CUST_NODE_INT_IMP(forb_objects_nolock /* cust_prefix */,
 /** 
  * Creates a new object reference.
  * 
- * @param orb FORB pseudo object this object reference is handled
- * by. This can be NULL only when forb_orb reference is created in
+ * @param orb FORB object this object reference is handled by. This
+ * can be NULL only when local forb_orb reference is created in
  * forb_init().
  * 
  * @param server_id Server ID of the remote FORB, where this object is
@@ -96,22 +96,26 @@ forb_object_new(forb_orb orb,
                forb_ref_init(&obj->ref);
                obj->orb = orb ? orb : obj;
                if (server_id) {
-                       /* remote object or forb_orb */
+                       /* remote object */
                        obj->server = *server_id;
                        obj->objkey = key;
                } else {
                        /* local object */
                        if (orb) {
+                               /* Normal local object */
                                forb_t *forb = forb_object_to_forb(obj);
                                obj->server = forb->server_id;
                                fosa_mutex_lock(&forb->objkey_mutex);
                                obj->objkey = ++forb->objkey;
+                               /* We do not use object references for tree pointers. */
                                forb_objects_nolock_insert(forb, obj);
                                fosa_mutex_unlock(&forb->objkey_mutex);
                        } else {
-                               /* Error - local objects must have orb */
-                               forb_object_release(obj);
-                               obj = NULL;
+                               /* forb_orb object. The forb_init()
+                                *  function must assign server field
+                                *  and put the object into the
+                                *  forb->objects  */
+                               obj->objkey = 0;
                        }
                }
        }