diff options
author | emersion <contact@emersion.fr> | 2017-10-31 15:02:41 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2017-10-31 15:02:41 +0100 |
commit | 6b6895168b46e8d5a8c231f083962172dc942e32 (patch) | |
tree | 02bf596ddd710a31e0d9c5b2ff98367f0396e6cf /examples/multi-pointer.c | |
parent | 7dc716a2bbfd765171fff24257affb2b1eeb24f7 (diff) |
Fix segfaults on exit in examples/mutli-pointer
Diffstat (limited to 'examples/multi-pointer.c')
-rw-r--r-- | examples/multi-pointer.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/examples/multi-pointer.c b/examples/multi-pointer.c index c69acc5f..e0993987 100644 --- a/examples/multi-pointer.c +++ b/examples/multi-pointer.c @@ -155,17 +155,21 @@ static void handle_input_add(struct compositor_state *state, wl_list_insert(&sample->cursors, &cursor->link); } +static void cursor_destroy(struct sample_cursor *cursor) { + wl_list_remove(&cursor->link); + wl_list_remove(&cursor->cursor_motion.link); + wl_list_remove(&cursor->cursor_motion_absolute.link); + wlr_cursor_destroy(cursor->cursor); + free(cursor); +} + static void handle_input_remove(struct compositor_state *state, struct wlr_input_device *device) { struct sample_state *sample = state->data; struct sample_cursor *cursor; wl_list_for_each(cursor, &sample->cursors, link) { if (cursor->device == device) { - wl_list_remove(&cursor->link); - wl_list_remove(&cursor->cursor_motion.link); - wl_list_remove(&cursor->cursor_motion_absolute.link); - wlr_cursor_destroy(cursor->cursor); - free(cursor); + cursor_destroy(cursor); break; } } @@ -212,9 +216,9 @@ int main(int argc, char *argv[]) { wl_display_run(compositor.display); compositor_fini(&compositor); - struct sample_cursor *cursor; - wl_list_for_each(cursor, &state.cursors, link) { - // TODO + struct sample_cursor *cursor, *tmp_cursor; + wl_list_for_each_safe(cursor, tmp_cursor, &state.cursors, link) { + cursor_destroy(cursor); } wlr_xcursor_theme_destroy(theme); |