Skip to content

Commit

Permalink
glw/event: Fix memory leak
Browse files Browse the repository at this point in the history
  • Loading branch information
andoma committed Aug 1, 2015
1 parent 76f9012 commit afd9a40
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 11 deletions.
2 changes: 1 addition & 1 deletion src/ui/glw/glw.c
Expand Up @@ -675,7 +675,7 @@ glw_destroy(glw_t *w)

while((gem = LIST_FIRST(&w->glw_event_maps)) != NULL) {
LIST_REMOVE(gem, gem_link);
gem->gem_dtor(gr, gem);
glw_event_map_destroy(gr, gem);
}

free(w->glw_matrix);
Expand Down
25 changes: 18 additions & 7 deletions src/ui/glw/glw_event.c
Expand Up @@ -33,6 +33,17 @@ typedef struct glw_event_external {
} glw_event_external_t;


/**
*
*/
void
glw_event_map_destroy(glw_root_t *gr, glw_event_map_t *gem)
{
rstr_release(gem->gem_action);
gem->gem_dtor(gr, gem);
}


/**
*
*/
Expand Down Expand Up @@ -61,7 +72,7 @@ glw_event_map_external_fire(glw_t *w, glw_event_map_t *gem, event_t *src)
glw_event_map_t *
glw_event_map_external_create(event_t *e)
{
glw_event_external_t *gee = malloc(sizeof(glw_event_external_t));
glw_event_external_t *gee = calloc(1, sizeof(glw_event_external_t));
e->e_flags |= EVENT_MAPPED;
gee->e = e;
gee->map.gem_dtor = glw_event_map_external_dtor;
Expand Down Expand Up @@ -118,7 +129,7 @@ glw_event_map_playTrack_fire(glw_t *w, glw_event_map_t *gem, event_t *src)
glw_event_map_t *
glw_event_map_playTrack_create(prop_t *track, prop_t *source, int mode)
{
glw_event_playTrack_t *g = malloc(sizeof(glw_event_playTrack_t));
glw_event_playTrack_t *g = calloc(1, sizeof(glw_event_playTrack_t));

g->track = prop_ref_inc(track);
g->source = prop_ref_inc(source);
Expand Down Expand Up @@ -179,7 +190,7 @@ glw_event_map_propref_fire(glw_t *w, glw_event_map_t *gem, event_t *src)
glw_event_map_t *
glw_event_map_propref_create(prop_t *prop, prop_t *target)
{
glw_event_propref_t *g = malloc(sizeof(glw_event_propref_t));
glw_event_propref_t *g = calloc(1, sizeof(glw_event_propref_t));

g->prop = prop_ref_inc(prop);
g->target = prop_ref_inc(target);
Expand Down Expand Up @@ -240,7 +251,7 @@ glw_event_map_deliverEvent_fire(glw_t *w, glw_event_map_t *gem, event_t *src)
glw_event_map_t *
glw_event_map_deliverEvent_create(prop_t *target, rstr_t *action)
{
glw_event_deliverEvent_t *de = malloc(sizeof(glw_event_deliverEvent_t));
glw_event_deliverEvent_t *de = calloc(1, sizeof(glw_event_deliverEvent_t));

de->target = prop_ref_inc(target);
de->action = rstr_dup(action);
Expand All @@ -263,7 +274,7 @@ glw_event_map_add(glw_t *w, glw_event_map_t *gem)
LIST_FOREACH(o, &w->glw_event_maps, gem_link) {
if(!strcmp(rstr_get(o->gem_action), rstr_get(gem->gem_action))) {
LIST_REMOVE(o, gem_link);
o->gem_dtor(w->glw_root, o);
glw_event_map_destroy(w->glw_root, o);
break;
}
}
Expand All @@ -282,7 +293,7 @@ glw_event_map_remove_by_action(glw_t *w, const char *action)
LIST_FOREACH(o, &w->glw_event_maps, gem_link) {
if(!strcmp(rstr_get(o->gem_action), action)) {
LIST_REMOVE(o, gem_link);
o->gem_dtor(w->glw_root, o);
glw_event_map_destroy(w->glw_root, o);
break;
}
}
Expand Down Expand Up @@ -407,7 +418,7 @@ glw_event_map_t *
glw_event_map_internal_create(const char *target, action_type_t event,
int uc)
{
glw_event_internal_t *g = malloc(sizeof(glw_event_internal_t));
glw_event_internal_t *g = calloc(1, sizeof(glw_event_internal_t));

g->target = target ? strdup(target) : NULL;
g->event = event;
Expand Down
2 changes: 1 addition & 1 deletion src/ui/glw/glw_event.h
Expand Up @@ -42,7 +42,7 @@ void glw_event_map_remove_by_action(glw_t *w, const char *action);

void glw_event_map_add(glw_t *w, glw_event_map_t *gem);

void glw_event_map_destroy(glw_event_map_t *gem);
void glw_event_map_destroy(glw_root_t *gr, glw_event_map_t *gem);

int glw_event_map_intercept(glw_t *w, struct event *e);

Expand Down
2 changes: 1 addition & 1 deletion src/ui/glw/glw_view_eval.c
Expand Up @@ -3166,7 +3166,7 @@ static glw_event_map_t *
glw_event_map_eval_block_create(glw_view_eval_context_t *ec,
struct token *block)
{
glw_event_map_eval_block_t *b = malloc(sizeof(glw_event_map_eval_block_t));
glw_event_map_eval_block_t *b = calloc(1, sizeof(glw_event_map_eval_block_t));

b->block = glw_view_clone_chain(ec->gr, block, NULL);

Expand Down
2 changes: 1 addition & 1 deletion src/ui/glw/glw_view_support.c
Expand Up @@ -124,7 +124,7 @@ glw_view_token_free(glw_root_t *gr, token_t *t)
break;

case TOKEN_EVENT:
t->t_gem->gem_dtor(gr, t->t_gem);
glw_event_map_destroy(gr, t->t_gem);
break;

case TOKEN_URI:
Expand Down

0 comments on commit afd9a40

Please sign in to comment.