weston-log: destroy subscriptions with destruction of subscribers

The subscription is directly related to both the log scope and
the subscriber. It makes no sense to destroy one of them and
keep the subscriptions living.

We only had code to destroy subscription with
the destruction of log scopes. Add code to destroy
subscriptions with destruction of subscribers.

Signed-off-by: Leandro Ribeiro <leandrohr@riseup.net>
This commit is contained in:
Leandro Ribeiro 2020-02-03 22:59:16 -03:00 committed by Pekka Paalanen
parent 1ded661aac
commit 23491cd931
4 changed files with 21 additions and 0 deletions

View File

@ -58,6 +58,8 @@ static void
weston_log_subscriber_destroy_log(struct weston_log_subscriber *subscriber) weston_log_subscriber_destroy_log(struct weston_log_subscriber *subscriber)
{ {
struct weston_debug_log_file *file = to_weston_debug_log_file(subscriber); struct weston_debug_log_file *file = to_weston_debug_log_file(subscriber);
weston_log_subscriber_release(subscriber);
free(file); free(file);
} }

View File

@ -228,6 +228,7 @@ weston_log_subscriber_destroy_flight_rec(struct weston_log_subscriber *sub)
if (weston_primary_flight_recorder_ring_buffer == &flight_rec->rb) if (weston_primary_flight_recorder_ring_buffer == &flight_rec->rb)
weston_primary_flight_recorder_ring_buffer = NULL; weston_primary_flight_recorder_ring_buffer = NULL;
weston_log_subscriber_release(sub);
free(flight_rec->rb.buf); free(flight_rec->rb.buf);
free(flight_rec); free(flight_rec);
} }

View File

@ -81,6 +81,9 @@ weston_log_subscription_add(struct weston_log_scope *scope,
void void
weston_log_subscription_remove(struct weston_log_subscription *sub); weston_log_subscription_remove(struct weston_log_subscription *sub);
void
weston_log_subscriber_release(struct weston_log_subscriber *subscriber);
void void
weston_log_bind_weston_debug(struct wl_client *client, weston_log_bind_weston_debug(struct wl_client *client,
void *data, uint32_t version, uint32_t id); void *data, uint32_t version, uint32_t id);

View File

@ -939,6 +939,21 @@ weston_log_scope_timestamp(struct weston_log_scope *scope,
return buf; return buf;
} }
void
weston_log_subscriber_release(struct weston_log_subscriber *subscriber)
{
struct weston_log_subscription *sub, *sub_tmp;
wl_list_for_each_safe(sub, sub_tmp, &subscriber->subscription_list, owner_link) {
/* destroy each subscription */
if (sub->owner->destroy_subscription)
sub->owner->destroy_subscription(sub->owner);
weston_log_subscription_destroy(sub);
}
}
/** Destroy a file type or a flight-rec type subscriber. /** Destroy a file type or a flight-rec type subscriber.
* *
* They are created, respectively, with weston_log_subscriber_create_log() * They are created, respectively, with weston_log_subscriber_create_log()