diff --git a/docs/reference/glib/glib-sections.txt.in b/docs/reference/glib/glib-sections.txt.in index 103c688ac..5258544a3 100644 --- a/docs/reference/glib/glib-sections.txt.in +++ b/docs/reference/glib/glib-sections.txt.in @@ -3359,6 +3359,7 @@ g_test_trap_assert_stdout_unmatched g_test_trap_assert_stderr g_test_trap_assert_stderr_unmatched g_test_trap_fork +g_test_disable_crash_reporting g_test_rand_bit g_test_rand_int diff --git a/glib/gtestutils.c b/glib/gtestutils.c index 0b7e68361..43fb4d7e4 100644 --- a/glib/gtestutils.c +++ b/glib/gtestutils.c @@ -1302,6 +1302,27 @@ g_test_log (GTestLogType lbit, } } +/** + * g_test_disable_crash_reporting: + * + * Attempt to disable system crash reporting infrastructure. + * + * This function should be called before exercising code paths that are + * expected or intended to crash, to avoid wasting resources in system-wide + * crash collection infrastructure such as systemd-coredump or abrt. + * + * Since: 2.78 + */ +void +g_test_disable_crash_reporting (void) +{ +#ifdef HAVE_SYS_RESOURCE_H + struct rlimit limit = { 0, 0 }; + + (void) setrlimit (RLIMIT_CORE, &limit); +#endif +} + /* We intentionally parse the command line without GOptionContext * because otherwise you would never be able to test it. */ @@ -1376,12 +1397,8 @@ parse_args (gint *argc_p, * tests spawn a *lot* of them. Avoid spamming system crash * collection programs such as systemd-coredump and abrt. */ -#ifdef HAVE_SYS_RESOURCE_H - { - struct rlimit limit = { 0, 0 }; - (void) setrlimit (RLIMIT_CORE, &limit); - } -#endif + g_test_disable_crash_reporting (); + argv[i] = NULL; /* Force non-TAP output when spawning a subprocess, since people often @@ -3980,12 +3997,7 @@ g_test_trap_fork (guint64 usec_timeout, * tests spawn a *lot* of them. Avoid spamming system crash * collection programs such as systemd-coredump and abrt. */ -#ifdef HAVE_SYS_RESOURCE_H - { - struct rlimit limit = { 0, 0 }; - (void) setrlimit (RLIMIT_CORE, &limit); - } -#endif + g_test_disable_crash_reporting (); return TRUE; } diff --git a/glib/gtestutils.h b/glib/gtestutils.h index 9406ff0d8..688f2eae7 100644 --- a/glib/gtestutils.h +++ b/glib/gtestutils.h @@ -407,6 +407,8 @@ GLIB_AVAILABLE_IN_2_38 gboolean g_test_failed (void); GLIB_AVAILABLE_IN_2_38 void g_test_set_nonfatal_assertions (void); +GLIB_AVAILABLE_IN_2_78 +void g_test_disable_crash_reporting (void); /** * g_test_add: diff --git a/glib/tests/assert-msg-test.c b/glib/tests/assert-msg-test.c index b46496635..7f450d226 100644 --- a/glib/tests/assert-msg-test.c +++ b/glib/tests/assert-msg-test.c @@ -19,20 +19,14 @@ */ #include "config.h" -#ifdef HAVE_SYS_RESOURCE_H -#include -#endif #include int main (int argc, char **argv) { -#ifdef HAVE_SYS_RESOURCE_H /* We expect this test to abort, so try to avoid that creating a coredump */ - struct rlimit limit = { 0, 0 }; - (void) setrlimit (RLIMIT_CORE, &limit); -#endif + g_test_disable_crash_reporting (); g_assert (42 < 0); return 0; diff --git a/glib/tests/messages-low-memory.c b/glib/tests/messages-low-memory.c index ecb507024..479143723 100644 --- a/glib/tests/messages-low-memory.c +++ b/glib/tests/messages-low-memory.c @@ -23,9 +23,6 @@ #include "config.h" #include -#ifdef HAVE_SYS_RESOURCE_H -#include -#endif #include static gboolean malloc_eom = FALSE; @@ -59,11 +56,8 @@ int main (int argc, char *argv[]) { -#ifdef HAVE_SYS_RESOURCE_H /* We expect this test to abort, so try to avoid that creating a coredump */ - struct rlimit limit = { 0, 0 }; - (void) setrlimit (RLIMIT_CORE, &limit); -#endif + g_test_disable_crash_reporting (); g_setenv ("LC_ALL", "C", TRUE);