mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-09-30 05:31:54 +00:00
clients: simple-im: handle proper destruction of objects
Add signal handler for SIGINT to enable graceful exit and release allocated memory. This resolves the memory leak observed with Valgrind: LEAK SUMMARY: definitely lost: 2,520 bytes in 2 blocks indirectly lost: 16,820 bytes in 11 blocks possibly lost: 0 bytes in 0 blocks still reachable: 0 bytes in 0 blocks suppressed: 0 bytes in 0 blocks Fixes: https://gitlab.freedesktop.org/wayland/weston/-/issues/872 Signed-off-by: Chirag Khurana <quic_ckhurana@quicinc.com>
This commit is contained in:
parent
b2e6a6438f
commit
287b3f1758
|
@ -30,6 +30,7 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/mman.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include <linux/input.h>
|
||||
|
||||
|
@ -105,6 +106,8 @@ static const uint32_t ignore_keys_on_compose[] = {
|
|||
XKB_KEY_Shift_R
|
||||
};
|
||||
|
||||
static int running = 1;
|
||||
|
||||
static void
|
||||
handle_surrounding_text(void *data,
|
||||
struct zwp_input_method_context_v1 *context,
|
||||
|
@ -481,10 +484,17 @@ simple_im_key_handler(struct simple_im *keyboard,
|
|||
text);
|
||||
}
|
||||
|
||||
static void
|
||||
signal_int(int signum)
|
||||
{
|
||||
running = 0;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct simple_im simple_im;
|
||||
struct sigaction sigint;
|
||||
int ret = 0;
|
||||
|
||||
memset(&simple_im, 0, sizeof(simple_im));
|
||||
|
@ -514,9 +524,31 @@ main(int argc, char *argv[])
|
|||
simple_im.context = NULL;
|
||||
simple_im.key_handler = simple_im_key_handler;
|
||||
|
||||
while (ret != -1)
|
||||
sigint.sa_handler = signal_int;
|
||||
sigemptyset(&sigint.sa_mask);
|
||||
sigint.sa_flags = SA_RESETHAND;
|
||||
sigaction(SIGINT, &sigint, NULL);
|
||||
|
||||
while (running && ret != -1)
|
||||
ret = wl_display_dispatch(simple_im.display);
|
||||
|
||||
if (simple_im.input_method)
|
||||
zwp_input_method_v1_destroy(simple_im.input_method);
|
||||
|
||||
if (simple_im.context)
|
||||
zwp_input_method_context_v1_destroy(simple_im.context);
|
||||
|
||||
if (simple_im.keyboard)
|
||||
wl_keyboard_destroy(simple_im.keyboard);
|
||||
|
||||
xkb_context_unref(simple_im.xkb_context);
|
||||
xkb_state_unref(simple_im.state);
|
||||
xkb_keymap_unref(simple_im.keymap);
|
||||
|
||||
wl_registry_destroy(simple_im.registry);
|
||||
wl_display_flush(simple_im.display);
|
||||
wl_display_disconnect(simple_im.display);
|
||||
|
||||
if (ret == -1) {
|
||||
fprintf(stderr, "Dispatch error: %s\n", strerror(errno));
|
||||
return -1;
|
||||
|
|
Loading…
Reference in a new issue