don't free attribute value from feed query
authorAleš Křenek <ljocha@ics.muni.cz>
Wed, 16 Nov 2005 11:49:07 +0000 (11:49 +0000)
committerAleš Křenek <ljocha@ics.muni.cz>
Wed, 16 Nov 2005 11:49:07 +0000 (11:49 +0000)
org.glite.jp.primary/src/feed.c

index 845453c..b9d8195 100644 (file)
@@ -99,7 +99,7 @@ static int match_feed(
                const glite_jp_attrval_t attrs[] 
 )
 {
-       int     i,fed;
+       int     i,fed,ret = 0;
        int     qi[QUERY_MAX];
        char    *owner = NULL;
        glite_jp_attrval_t      meta[QUERY_MAX+1];
@@ -140,23 +140,27 @@ static int match_feed(
                        j=0;
                        for (i=0; feed->qry[i].attr; i++) if (!qi[i]) {
                                assert(j<QUERY_MAX);
-                               meta[j].name = feed->qry[i].attr;
+                               meta[j].name = strdup(feed->qry[i].attr);
                                qi2[j] = i;
                                j++;
                        }
 
                        if (glite_jppsbe_get_job_metadata(ctx,job,meta)) {
                                glite_jp_error_t        err;
+
                                memset(&err,0,sizeof err);
                                err.code = EIO;
                                err.source = __FUNCTION__;
                                err.desc = "complete query";
-                               return glite_jp_stack_error(ctx,&err);
+                               ret = glite_jp_stack_error(ctx,&err);
+                               goto cleanup;
                        }
 
                        for (i=0; meta[i].name; i++) {
-                               if (!check_qry_item(ctx,feed->qry+qi2[i],meta+i))
-                                       return 0;
+                               if (!check_qry_item(ctx,feed->qry+qi2[i],meta+i)) {
+                                       ret = 0;
+                                       goto cleanup;
+                               }
                                if (!strcmp(meta[i].name,GLITE_JP_ATTR_OWNER)) owner = meta[i].value;
                        }
                }
@@ -181,8 +185,10 @@ static int match_feed(
                }
                glite_jpps_single_feed(ctx,feed->id,0,feed->destination,job,owner,attrs);
        }
+
+cleanup:
        for (i=0; meta[i].name; i++) glite_jp_attrval_free(meta+i,0);
-       return 0;
+       return ret;
 }
 
 /* TODO: overit, ze do dalsich atributu se leze az kdyz matchuji metadata