diff --git a/src/libply/ply-trigger.c b/src/libply/ply-trigger.c index b1952d71..46ea5477 100644 --- a/src/libply/ply-trigger.c +++ b/src/libply/ply-trigger.c @@ -41,6 +41,7 @@ struct _ply_trigger ply_list_t *closures; ply_trigger_t **free_address; + int ignore_count; }; ply_trigger_t * @@ -51,6 +52,7 @@ ply_trigger_new (ply_trigger_t **free_address) trigger = calloc (1, sizeof (ply_trigger_t)); trigger->free_address = free_address; trigger->closures = ply_list_new (); + trigger->ignore_count = 0; return trigger; } @@ -131,6 +133,12 @@ ply_trigger_remove_handler (ply_trigger_t *trigger, } } +void +ply_trigger_ignore_next_pull (ply_trigger_t *trigger) +{ + trigger->ignore_count++; +} + void ply_trigger_pull (ply_trigger_t *trigger, const void *data) @@ -138,6 +146,13 @@ ply_trigger_pull (ply_trigger_t *trigger, ply_list_node_t *node; assert (trigger != NULL); + assert (trigger->ignore_count >= 0); + + if (trigger->ignore_count > 0) + { + trigger->ignore_count--; + return; + } node = ply_list_get_first_node (trigger->closures); while (node != NULL) diff --git a/src/libply/ply-trigger.h b/src/libply/ply-trigger.h index cf9fbf09..d543f042 100644 --- a/src/libply/ply-trigger.h +++ b/src/libply/ply-trigger.h @@ -44,6 +44,7 @@ void ply_trigger_remove_handler (ply_trigger_t *trigger, void *user_data); void ply_trigger_free (ply_trigger_t *trigger); +void ply_trigger_ignore_next_pull (ply_trigger_t *trigger); void ply_trigger_pull (ply_trigger_t *trigger, const void *data); #endif