See org.freedesktop.systemd1(5) for more information.
VALGRIND:
- To run systemd under valgrind, compile with meson option
- -Dvalgrind=true and have valgrind development headers installed
- (i.e. valgrind-devel or equivalent). Otherwise, false positives will be
- triggered by code which violates some rules but is actually safe. Note
- that valgrind generates nice output only on exit(), hence on shutdown
- we don't execve() systemd-shutdown.
+ To run systemd under valgrind, compile systemd with the valgrind
+ development headers available (i.e. valgrind-devel or equivalent).
+ Otherwise, false positives will be triggered by code which violates
+ some rules but is actually safe. Note that valgrind generates nice
+ output only on exit(), hence on shutdown we don't execve()
+ systemd-shutdown.
STABLE BRANCHES AND BACKPORTS:
Stable branches with backported patches are available in the
conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
-
-conf.set10('VALGRIND', get_option('valgrind'))
conf.set10('LOG_TRACE', get_option('log-trace'))
default_user_path = get_option('user-path')
['debug hashmap'],
['debug mmap cache'],
['debug siphash'],
- ['valgrind', conf.get('VALGRIND') == 1],
['trace logging', conf.get('LOG_TRACE') == 1],
['install tests', install_tests],
['link-udev-shared', get_option('link-udev-shared')],
description : 'bump /proc/sys/fs/file-max to LONG_MAX')
option('bump-proc-sys-fs-nr-open', type : 'boolean',
description : 'bump /proc/sys/fs/nr_open to INT_MAX')
-option('valgrind', type : 'boolean', value : false,
- description : 'do extra operations to avoid valgrind warnings')
option('log-trace', type : 'boolean', value : false,
description : 'enable low level debug logging')
option('user-path', type : 'string',
#include <pthread.h>
#include <stdint.h>
#include <stdlib.h>
+#if HAVE_VALGRIND_VALGRIND_H
+# include <valgrind/valgrind.h>
+#endif
#include "alloc-util.h"
#include "fileio.h"
mempool_trim(&ordered_hashmap_pool);
}
-#if VALGRIND
+#if HAVE_VALGRIND_VALGRIND_H
_destructor_ static void cleanup_pools(void) {
/* Be nice to valgrind */
- hashmap_trim_pools();
+ if (RUNNING_ON_VALGRIND)
+ hashmap_trim_pools();
}
#endif
#include <seccomp.h>
#endif
#if HAVE_VALGRIND_VALGRIND_H
-#include <valgrind/valgrind.h>
+# include <valgrind/valgrind.h>
#endif
#include "sd-bus.h"
assert(i <= args_size);
/*
- * We want valgrind to print its memory usage summary before reexecution. Valgrind won't do
- * this is on its own on exec(), but it will do it on exit(). Hence, to ensure we get a
+ * We want valgrind to print its memory usage summary before reexecution. Valgrind won't do
+ * this is on its own on exec(), but it will do it on exit(). Hence, to ensure we get a
* summary here, fork() off a child, let it exit() cleanly, so that it prints the summary,
* and wait() for it in the parent, before proceeding into the exec().
*/
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
+#if HAVE_VALGRIND_VALGRIND_H
+# include <valgrind/valgrind.h>
+#endif
#include "sd-dhcp-client.h"
#include "sd-event.h"
test_discover_message(e);
test_addr_acq(e);
-#if VALGRIND
+#if HAVE_VALGRIND_VALGRIND_H
/* Make sure the async_close thread has finished.
* valgrind would report some of the phread_* structures
* as not cleaned up properly. */
- sleep(1);
+ if (RUNNING_ON_VALGRIND)
+ sleep(1);
#endif
return 0;
#include <sys/un.h>
#include <unistd.h>
#if HAVE_VALGRIND_VALGRIND_H
-#include <valgrind/valgrind.h>
+# include <valgrind/valgrind.h>
#endif
#define SD_JOURNAL_SUPPRESS_LOCATION
return fd_nonblock(r, nonblock);
}
-#if VALGRIND
void close_journal_fd(void) {
- /* Be nice to valgrind. This is not atomic. This must be used only in tests. */
+#if HAVE_VALGRIND_VALGRIND_H
+ /* Be nice to valgrind. This is not atomic, so it is useful mainly for debugging. */
if (!RUNNING_ON_VALGRIND)
return;
safe_close(fd_plus_one - 1);
fd_plus_one = 0;
-}
#endif
+}
_public_ int sd_journal_print(int priority, const char *format, ...) {
int r;
#include <stdbool.h>
int journal_fd_nonblock(bool nonblock);
-
-#if VALGRIND
void close_journal_fd(void);
-#else
-static inline void close_journal_fd(void) {}
-#endif
* still catch it and complain. The masking trick does make the hash
* noticeably faster for short strings (like English words).
*/
-#if !VALGRIND && !HAS_FEATURE_ADDRESS_SANITIZER && !HAS_FEATURE_MEMORY_SANITIZER
+#define VALGRIND_LIKE (HAVE_VALGRIND_VALGRIND_H || HAS_FEATURE_ADDRESS_SANITIZER || HAS_FEATURE_MEMORY_SANITIZER)
+
+#if !VALGRIND_LIKE
switch(length)
{
* still catch it and complain. The masking trick does make the hash
* noticeably faster for short strings (like English words).
*/
-#if !VALGRIND && !HAS_FEATURE_ADDRESS_SANITIZER && !HAS_FEATURE_MEMORY_SANITIZER
+#if !VALGRIND_LIKE
switch(length)
{
* still catch it and complain. The masking trick does make the hash
* noticeably faster for short strings (like English words).
*/
-#if !VALGRIND && !HAS_FEATURE_ADDRESS_SANITIZER && !HAS_FEATURE_MEMORY_SANITIZER
+#if !VALGRIND_LIKE
switch(length)
{