Skip to content

Commit

Permalink
wayland: Fix memory leaks
Browse files Browse the repository at this point in the history
(cherry picked from commit e239295)
  • Loading branch information
cgutman authored and Kontrabant committed Sep 19, 2024
1 parent 1c4dd01 commit 6f0fae7
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/video/wayland/SDL_waylandevents.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,12 +248,25 @@ static SDL_bool keyboard_repeat_key_is_set(SDL_WaylandKeyboardRepeat *repeat_inf
return repeat_info->is_initialized && repeat_info->is_key_down && key == repeat_info->key;
}

static void sync_done_handler(void *data, struct wl_callback *callback, uint32_t callback_data)
{
/* Nothing to do, just destroy the callback */
wl_callback_destroy(callback);
}

static struct wl_callback_listener sync_listener = {
sync_done_handler
};

void Wayland_SendWakeupEvent(_THIS, SDL_Window *window)
{
SDL_VideoData *d = _this->driverdata;

/* TODO: Maybe use a pipe to avoid the compositor roundtrip? */
wl_display_sync(d->display);
/* Queue a sync event to unblock the event queue fd if it's empty and being waited on.
* TODO: Maybe use a pipe to avoid the compositor roundtrip?
*/
struct wl_callback *cb = wl_display_sync(d->display);
wl_callback_add_listener(cb, &sync_listener, NULL);
WAYLAND_wl_display_flush(d->display);
}

Expand Down Expand Up @@ -2522,6 +2535,9 @@ void Wayland_display_destroy_input(SDL_VideoData *d)
if (input->primary_selection_device->selection_offer) {
Wayland_primary_selection_offer_destroy(input->primary_selection_device->selection_offer);
}
if (input->primary_selection_device->primary_selection_device) {
zwp_primary_selection_device_v1_destroy(input->primary_selection_device->primary_selection_device);
}
SDL_free(input->primary_selection_device);
}

Expand Down

0 comments on commit 6f0fae7

Please sign in to comment.