diff --git a/src/basic/pidref.c b/src/basic/pidref.c index 4932266c24..02d6832bd0 100644 --- a/src/basic/pidref.c +++ b/src/basic/pidref.c @@ -239,3 +239,18 @@ int pidref_sigqueue(PidRef *pidref, int sig, int value) { return -ESRCH; } + +static void pidref_hash_func(const PidRef *pidref, struct siphash *state) { + siphash24_compress(&pidref->pid, sizeof(pidref->pid), state); +} + +static int pidref_compare_func(const PidRef *a, const PidRef *b) { + return CMP(a->pid, b->pid); +} + +DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR( + pidref_hash_ops, + PidRef, + pidref_hash_func, + pidref_compare_func, + pidref_free); diff --git a/src/basic/pidref.h b/src/basic/pidref.h index 60f0b064ab..835bafc96e 100644 --- a/src/basic/pidref.h +++ b/src/basic/pidref.h @@ -52,3 +52,5 @@ int pidref_kill_and_sigcont(PidRef *pidref, int sig); int pidref_sigqueue(PidRef *pidfref, int sig, int value); #define TAKE_PIDREF(p) TAKE_GENERIC((p), PidRef, PIDREF_NULL) + +extern const struct hash_ops pidref_hash_ops; /* Has destructor call for pidref_free(), i.e. expects heap allocated PidRef as keys */