mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-25 06:59:46 -05:00
test-compositor: extend leak checks into clients
Run leak checks also on clients of test-compositor.
Checking leaks in memory is the same as in normal TEST.
Checking file descriptor leaks is slightly more complex, as we pass an
open file descriptor in the WAYLAND_SOCKET environment variable, which
will be consumed by a client calling wl_display_connect(), but otherwise
remain unused. We manage this accounting by checking if the environment
variable has been unset by wl_display_connect() as it consumes the
socket.
Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
[daniels: squashed counter-proposal patch to simplify fd leak checking,
plus Bill's counter-counter-proposal, and reworded log.]
This commit is contained in:
parent
d8e72f98f2
commit
9ef0277571
1 changed files with 15 additions and 0 deletions
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
#define WL_HIDE_DEPRECATED
|
#define WL_HIDE_DEPRECATED
|
||||||
|
|
||||||
|
#include "test-runner.h"
|
||||||
#include "test-compositor.h"
|
#include "test-compositor.h"
|
||||||
|
|
||||||
/* --- Protocol --- */
|
/* --- Protocol --- */
|
||||||
|
|
@ -135,6 +136,7 @@ static void
|
||||||
run_client(void (*client_main)(void), int wayland_sock, int client_pipe)
|
run_client(void (*client_main)(void), int wayland_sock, int client_pipe)
|
||||||
{
|
{
|
||||||
char s[8];
|
char s[8];
|
||||||
|
int cur_alloc, cur_fds;
|
||||||
int can_continue = 0;
|
int can_continue = 0;
|
||||||
|
|
||||||
/* Wait until display signals that client can continue */
|
/* Wait until display signals that client can continue */
|
||||||
|
|
@ -147,7 +149,20 @@ run_client(void (*client_main)(void), int wayland_sock, int client_pipe)
|
||||||
snprintf(s, sizeof s, "%d", wayland_sock);
|
snprintf(s, sizeof s, "%d", wayland_sock);
|
||||||
setenv("WAYLAND_SOCKET", s, 0);
|
setenv("WAYLAND_SOCKET", s, 0);
|
||||||
|
|
||||||
|
cur_alloc = get_current_alloc_num();
|
||||||
|
cur_fds = count_open_fds();
|
||||||
|
|
||||||
client_main();
|
client_main();
|
||||||
|
|
||||||
|
/* Clients using wl_display_connect() will end up closing the socket
|
||||||
|
* passed in through the WAYLAND_SOCKET environment variable. When
|
||||||
|
* doing this, it clears the environment variable, so if it's been
|
||||||
|
* unset, then we assume the client consumed the file descriptor and
|
||||||
|
* do not count it towards leak checking. */
|
||||||
|
if (!getenv("WAYLAND_SOCKET"))
|
||||||
|
cur_fds--;
|
||||||
|
|
||||||
|
check_leaks(cur_alloc, cur_fds);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct client_info *
|
static struct client_info *
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue