-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Finally merged! :)
Thanks David On 12-01-30 04:58 PM, Thibault, Daniel wrote: >> For some reason, this patch does not apply ... > > Okay, my git repository is now properly connected, and below is the patch > rewritten for the current commit. Besides enforcing the return values and > outputting --help to stdout, the problem lay with the instances of struct > ctx_type *type being created but not assigned to the doubly-linked list under > various error conditions. > > ------------------------------ > From e8e3c1db9311fda3b01a9318e263ce55b476222f Mon, 30 Jan 2012 16:55:02 -0500 > From: Daniel U. Thibault <[email protected]> > Date: Mon, 30 Jan 2012 16:54:47 -0500 > Subject: [PATCH] lttng-tools add_context : Fixing memory leaks > > Signed-off-by: Daniel U. Thibault <[email protected]> > > diff --git a/src/bin/lttng/commands/add_context.c > b/src/bin/lttng/commands/add_context.c > index 2f3bce1..2fec520 100644 > --- a/src/bin/lttng/commands/add_context.c > +++ b/src/bin/lttng/commands/add_context.c > @@ -313,14 +313,14 @@ > fprintf(ofp, "Options:\n"); > fprintf(ofp, " -h, --help Show this help\n"); > fprintf(ofp, " --list-options Simple listing of options\n"); > - fprintf(ofp, " -s, --session NAME Apply on session name\n"); > - fprintf(ofp, " -c, --channel NAME Apply on channel\n"); > - fprintf(ofp, " -e, --event NAME Apply on event\n"); > + fprintf(ofp, " -s, --session NAME Apply to session name\n"); > + fprintf(ofp, " -c, --channel NAME Apply to channel\n"); > + fprintf(ofp, " -e, --event NAME Apply to event\n"); > fprintf(ofp, " -k, --kernel Apply to the kernel tracer\n"); > #if 0 > fprintf(ofp, " -u, --userspace [CMD] Apply to the user-space > tracer\n"); > fprintf(ofp, " If no CMD, the domain used is > UST global\n"); > - fprintf(ofp, " or else the domain is UST > EXEC_NAME\n"); > + fprintf(ofp, " otherwise the domain is UST > EXEC_NAME\n"); > fprintf(ofp, " -p, --pid PID If -u, apply to specific PID > (domain: UST PID)\n"); > #else > fprintf(ofp, " -u, --userspace Apply to the user-space > tracer\n"); > @@ -385,7 +385,7 @@ > goto error; > } > > - /* Iterate over all context type given */ > + /* Iterate over all the context types given */ > cds_list_for_each_entry(type, &ctx_type_list.head, list) { > context.ctx = type->opt->ctx_type; > if (context.ctx == LTTNG_EVENT_CONTEXT_PERF_COUNTER) { > @@ -444,7 +444,7 @@ > } > > /* > - * Add context on channel or event. > + * Add context to channel or event. > */ > int cmd_add_context(int argc, const char **argv) > { > @@ -455,6 +455,7 @@ > > if (argc < 2) { > usage(stderr); > + ret = CMD_ERROR; > goto end; > } > > @@ -464,17 +465,10 @@ > while ((opt = poptGetNextOpt(pc)) != -1) { > switch (opt) { > case OPT_HELP: > - usage(stderr); > + usage(stdout); > ret = CMD_SUCCESS; > goto end; > case OPT_TYPE: > - type = malloc(sizeof(struct ctx_type)); > - if (type == NULL) { > - perror("malloc ctx_type"); > - ret = -1; > - goto end; > - } > - > /* > * Look up the index of opt_type in ctx_opts[] first, > so we don't > * have to free(type) on failure. > @@ -482,11 +476,21 @@ > index = find_ctx_type_idx(opt_type); > if (index < 0) { > ERR("Unknown context type %s", opt_type); > + ret = CMD_ERROR; > + goto end; > + } > + type = malloc(sizeof(struct ctx_type)); > + if (type == NULL) { > + perror("malloc ctx_type"); > + ret = CMD_FATAL; > goto end; > } > type->opt = &ctx_opts[index]; > if (type->opt->ctx_type == -1) { > ERR("Unknown context type %s", opt_type); > + free(type); > + ret = CMD_ERROR; > + goto end; > } else { > cds_list_add(&type->list, &ctx_type_list.head); > } > @@ -511,7 +515,7 @@ > if (!opt_session_name) { > session_name = get_session_name(); > if (session_name == NULL) { > - ret = -1; > + ret = CMD_ERROR; > goto end; > } > } else { > @@ -520,11 +524,11 @@ > > ret = add_context(session_name); > > +end: > /* Cleanup allocated memory */ > cds_list_for_each_entry_safe(type, tmptype, &ctx_type_list.head, list) { > free(type); > } > > -end: > return ret; > } > ------------------------------ > > Daniel U. Thibault > R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D > Canada - Valcartier (DRDC Valcartier) > Système de systèmes (SdS) / System of Systems (SoS) > Solutions informatiques et expérimentations (SIE) / Computing Solutions and > Experimentations (CSE) > 2459 Boul. Pie XI Nord > Québec, QC G3J 1X5 > CANADA > Vox : (418) 844-4000 x4245 > Fax : (418) 844-4538 > NAC: 918V QSDJ > Gouvernement du Canada / Government of Canada > <http://www.valcartier.drdc-rddc.gc.ca/> > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQEcBAEBAgAGBQJPJxRDAAoJEELoaioR9I02NscH/iWpn2bA8y2FOz8vR6sTXRhG awO64UvWHxzkX0FX433Qa0qsZSgx4QGs7vmrQtf1/iI9o7LyEJ34Z9C36udeLXWc MMldCf2LaEvUB+tM6nEkWS2+rIDFwm7HNSqndFsSLB13fdHcKci0H4I4WCxgBDbZ J07pZC4/chcfSv/a9N9/c4NDgNzidF+vg8b8F9Y0YzP/w6Elji38muspiXheHii3 X1+nyjr8LIOZUf+aBLPetTmc+6nRKBpzaQSzLHk/8BYvLm068jS/rnER9AQNUvBJ YzQ4UlopEn5SmCegKPBlYNp1mB3F+6+kA/1S7YwgvhnU787YCXPbAhoZZP9rEtI= =KRBc -----END PGP SIGNATURE----- _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
