resource: pass the requesting resource set in an argument to the veto functions
authorJanos Kovacs <jankovac503@gmail.com>
Mon, 6 Jan 2014 16:58:53 +0000 (18:58 +0200)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Wed, 8 Jan 2014 18:03:38 +0000 (20:03 +0200)
src/resource/resource-lua.c
src/resource/resource-lua.h
src/resource/resource-owner.c

index dba4f93..e2dde1d 100644 (file)
@@ -169,30 +169,32 @@ void mrp_resource_lua_init(lua_State *L)
 bool mrp_resource_lua_veto(mrp_zone_t *zone,
                            mrp_resource_set_t *rset,
                            mrp_resource_owner_t *owners,
-                           mrp_resource_mask_t grant)
+                           mrp_resource_mask_t grant,
+                           mrp_resource_set_t *reqset)
 {
     lua_State *L = mrp_lua_get_lua_state();
     mrp_lua_resmethod_t *methods = mrp_lua_get_resource_methods();
     mrp_funcarray_t *veto;
-    mrp_resource_setref_t *sref;
+    mrp_resource_setref_t *sref, *rref;
     mrp_resource_ownersref_t *oref;
     mrp_funcbridge_value_t args[16];
     int i;
 
     if (L && zone && rset && owners && methods &&
         (sref = find_in_id_hash(rset->id)) &&
-        (oref = owners_get(L, zone->id)))
+        (oref = owners_get(L, zone->id)) &&
+        (rref = find_in_id_hash(reqset->id)))
     {
         oref->owners = owners;
 
         if ((veto = methods->veto)) {
-
             args[i=0].string  = zone->name;
             args[++i].pointer = sref;
             args[++i].integer = grant;
             args[++i].pointer = oref;
+            args[++i].pointer = rref;
 
-            return mrp_funcarray_call_from_c(L, veto, "sodo", args);
+            return mrp_funcarray_call_from_c(L, veto, "sodoo", args);
         }
     }
 
index 623644b..0a7203c 100644 (file)
@@ -49,7 +49,8 @@ struct mrp_resource_setref_s {
 void mrp_resource_lua_init(lua_State *);
 
 bool mrp_resource_lua_veto(mrp_zone_t *, mrp_resource_set_t *,
-                           mrp_resource_owner_t *, mrp_resource_mask_t);
+                           mrp_resource_owner_t *, mrp_resource_mask_t,
+                           mrp_resource_set_t *);
 void mrp_resource_lua_set_owners(mrp_zone_t *, mrp_resource_owner_t *);
 
 void mrp_resource_lua_register_resource_set(mrp_resource_set_t *);
index 9dbdb96..d5428af 100644 (file)
@@ -245,7 +245,7 @@ void mrp_resource_owner_update_zone(uint32_t zoneid,
                 }
                 owners = get_owner(zoneid, 0);
                 if ((grant & mandatory) == mandatory &&
-                    mrp_resource_lua_veto(zone, rset, owners, grant))
+                    mrp_resource_lua_veto(zone, rset, owners, grant, reqset))
                 {
                     advice = grant;
                 }