mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 23:43:29 +01:00
Add postfork support for nss
We need this in our unit tests, since otherwise NSS will notice we've forked and start cussing us out. I suspect we'll need a different hack for daemonizing, but this should be enough for tinytest to work.
This commit is contained in:
parent
c317e78dd7
commit
d811ce2421
@ -25,6 +25,7 @@
|
||||
#ifdef TINYTEST_LOCAL
|
||||
#include "tinytest_local.h"
|
||||
#endif
|
||||
#define TINYTEST_POSTFORK
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -118,6 +119,12 @@ testcase_run_bare_(const struct testcase_t *testcase)
|
||||
|
||||
#ifndef NO_FORKING
|
||||
|
||||
#ifdef TINYTEST_POSTFORK
|
||||
void tinytest_postfork(void);
|
||||
#else
|
||||
static void tinytest_postfork(void) { }
|
||||
#endif
|
||||
|
||||
static enum outcome
|
||||
testcase_run_forked_(const struct testgroup_t *group,
|
||||
const struct testcase_t *testcase)
|
||||
@ -187,6 +194,7 @@ testcase_run_forked_(const struct testgroup_t *group,
|
||||
int test_r, write_r;
|
||||
char b[1];
|
||||
close(outcome_pipe[0]);
|
||||
tinytest_postfork();
|
||||
test_r = testcase_run_bare_(testcase);
|
||||
assert(0<=(int)test_r && (int)test_r<=2);
|
||||
b[0] = "NYS"[test_r];
|
||||
|
@ -127,3 +127,13 @@ crypto_global_cleanup(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Run operations that the crypto library requires to be happy again
|
||||
* after forking. */
|
||||
void
|
||||
crypto_postfork(void)
|
||||
{
|
||||
#ifdef ENABLE_NSS
|
||||
crypto_nss_postfork();
|
||||
#endif
|
||||
}
|
||||
|
@ -24,5 +24,6 @@ int crypto_global_init(int hardwareAccel,
|
||||
|
||||
void crypto_thread_cleanup(void);
|
||||
int crypto_global_cleanup(void);
|
||||
void crypto_postfork(void);
|
||||
|
||||
#endif /* !defined(TOR_CRYPTO_H) */
|
||||
|
@ -93,3 +93,10 @@ crypto_nss_global_cleanup(void)
|
||||
{
|
||||
NSS_Shutdown();
|
||||
}
|
||||
|
||||
void
|
||||
crypto_nss_postfork(void)
|
||||
{
|
||||
crypto_nss_global_cleanup();
|
||||
crypto_nss_early_init();
|
||||
}
|
||||
|
@ -26,6 +26,8 @@ void crypto_nss_early_init(void);
|
||||
int crypto_nss_late_init(void);
|
||||
|
||||
void crypto_nss_global_cleanup(void);
|
||||
|
||||
void crypto_nss_postfork(void);
|
||||
#endif
|
||||
|
||||
#endif /* !defined(TOR_CRYPTO_NSS_H) */
|
||||
|
@ -223,6 +223,13 @@ an_assertion_failed(void)
|
||||
tinytest_set_test_failed_();
|
||||
}
|
||||
|
||||
void tinytest_postfork(void);
|
||||
void
|
||||
tinytest_postfork(void)
|
||||
{
|
||||
crypto_postfork();
|
||||
}
|
||||
|
||||
/** Main entry point for unit test code: parse the command line, and run
|
||||
* some unit tests. */
|
||||
int
|
||||
|
Loading…
Reference in New Issue
Block a user