ASAN: trigger leak before exiting
This disables the default leak-check-on-exit behavior which reports a bunch of leaks that are only leaks while exiting, at which point they don’t matter, because the operating system will clean up the memory our process used.
This commit is contained in:
parent
5a36d090c7
commit
cb3cdb602a
|
@ -17,6 +17,9 @@
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include <i3/ipc.h>
|
#include <i3/ipc.h>
|
||||||
#include <ev.h>
|
#include <ev.h>
|
||||||
|
#ifdef I3_ASAN_ENABLED
|
||||||
|
#include <sanitizer/lsan_interface.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
@ -212,6 +215,9 @@ void got_data(struct ev_loop *loop, ev_io *watcher, int events) {
|
||||||
/* EOF received. Since i3 will restart i3bar instances as appropriate,
|
/* EOF received. Since i3 will restart i3bar instances as appropriate,
|
||||||
* we exit here. */
|
* we exit here. */
|
||||||
DLOG("EOF received, exiting...\n");
|
DLOG("EOF received, exiting...\n");
|
||||||
|
#ifdef I3_ASAN_ENABLED
|
||||||
|
__lsan_do_leak_check();
|
||||||
|
#endif
|
||||||
clean_xcb();
|
clean_xcb();
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,10 @@
|
||||||
#include <X11/XKBlib.h>
|
#include <X11/XKBlib.h>
|
||||||
#include <X11/extensions/XKB.h>
|
#include <X11/extensions/XKB.h>
|
||||||
|
|
||||||
|
#ifdef I3_ASAN_ENABLED
|
||||||
|
#include <sanitizer/lsan_interface.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "libi3.h"
|
#include "libi3.h"
|
||||||
|
|
||||||
|
@ -1070,6 +1074,9 @@ void xcb_chk_cb(struct ev_loop *loop, ev_check *watcher, int revents) {
|
||||||
|
|
||||||
if (xcb_connection_has_error(xcb_connection)) {
|
if (xcb_connection_has_error(xcb_connection)) {
|
||||||
ELOG("X11 connection was closed unexpectedly - maybe your X server terminated / crashed?\n");
|
ELOG("X11 connection was closed unexpectedly - maybe your X server terminated / crashed?\n");
|
||||||
|
#ifdef I3_ASAN_ENABLED
|
||||||
|
__lsan_do_leak_check();
|
||||||
|
#endif
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,10 @@
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#ifdef I3_ASAN_ENABLED
|
||||||
|
#include <sanitizer/lsan_interface.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "all.h"
|
#include "all.h"
|
||||||
#include "shmlog.h"
|
#include "shmlog.h"
|
||||||
|
|
||||||
|
@ -1658,6 +1662,9 @@ void cmd_layout_toggle(I3_CMD, const char *toggle_mode) {
|
||||||
*/
|
*/
|
||||||
void cmd_exit(I3_CMD) {
|
void cmd_exit(I3_CMD) {
|
||||||
LOG("Exiting due to user command.\n");
|
LOG("Exiting due to user command.\n");
|
||||||
|
#ifdef I3_ASAN_ENABLED
|
||||||
|
__lsan_do_leak_check();
|
||||||
|
#endif
|
||||||
ipc_shutdown();
|
ipc_shutdown();
|
||||||
unlink(config.ipc_socket_path);
|
unlink(config.ipc_socket_path);
|
||||||
xcb_disconnect(conn);
|
xcb_disconnect(conn);
|
||||||
|
|
|
@ -13,6 +13,10 @@
|
||||||
*/
|
*/
|
||||||
#include "all.h"
|
#include "all.h"
|
||||||
|
|
||||||
|
#ifdef I3_ASAN_ENABLED
|
||||||
|
#include <sanitizer/lsan_interface.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct placeholder_state {
|
typedef struct placeholder_state {
|
||||||
/** The X11 placeholder window. */
|
/** The X11 placeholder window. */
|
||||||
xcb_window_t window;
|
xcb_window_t window;
|
||||||
|
@ -114,6 +118,9 @@ void restore_connect(void) {
|
||||||
if (restore_conn != NULL) {
|
if (restore_conn != NULL) {
|
||||||
xcb_disconnect(restore_conn);
|
xcb_disconnect(restore_conn);
|
||||||
}
|
}
|
||||||
|
#ifdef I3_ASAN_ENABLED
|
||||||
|
__lsan_do_leak_check();
|
||||||
|
#endif
|
||||||
errx(EXIT_FAILURE, "Cannot open display\n");
|
errx(EXIT_FAILURE, "Cannot open display\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue