Skip to content

Commit 8fcceb5

Browse files
authored
CDRIVER-4151 Replace static TestFnCtx with allocated object (#865)
1 parent eb1e39a commit 8fcceb5

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

src/libmongoc/tests/TestSuite.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,17 @@ _TestSuite_AddFull (TestSuite *suite, /* IN */
364364
}
365365

366366

367+
void
368+
_TestSuite_TestFnCtxDtor (void *ctx)
369+
{
370+
TestFuncDtor dtor = ((TestFnCtx *) ctx)->dtor;
371+
if (dtor) {
372+
dtor (ctx);
373+
}
374+
free (ctx);
375+
}
376+
377+
367378
#if defined(_WIN32)
368379
static void
369380
_print_getlasterror_win (const char *msg)
@@ -873,8 +884,7 @@ test_matches (TestSuite *suite, Test *test)
873884
}
874885

875886
for (i = 0; i < suite->match_patterns.len; i++) {
876-
char *pattern =
877-
_mongoc_array_index (&suite->match_patterns, char *, i);
887+
char *pattern = _mongoc_array_index (&suite->match_patterns, char *, i);
878888
if (TestSuite_TestMatchesName (suite, test, pattern)) {
879889
return true;
880890
}

src/libmongoc/tests/TestSuite.h

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,7 @@ struct _TestSuite {
674674

675675
struct _TestFnCtx {
676676
TestFunc test_fn;
677+
TestFuncDtor dtor;
677678
};
678679

679680

@@ -714,15 +715,23 @@ _TestSuite_AddFull (TestSuite *suite,
714715
TestFuncDtor dtor,
715716
void *ctx,
716717
...);
718+
void
719+
_TestSuite_TestFnCtxDtor (void *ctx);
717720
#define TestSuite_AddFull(_suite, _name, _func, _dtor, _ctx, ...) \
718721
_TestSuite_AddFull (_suite, _name, _func, _dtor, _ctx, __VA_ARGS__, NULL)
719-
#define TestSuite_AddFullWithTestFn( \
720-
_suite, _name, _func, _dtor, _test_fn, ...) \
721-
do { \
722-
static TestFnCtx ctx; \
723-
ctx.test_fn = (TestFunc) (_test_fn); \
724-
_TestSuite_AddFull ( \
725-
_suite, _name, _func, _dtor, &ctx, __VA_ARGS__, NULL); \
722+
#define TestSuite_AddFullWithTestFn( \
723+
_suite, _name, _func, _dtor, _test_fn, ...) \
724+
do { \
725+
TestFnCtx *ctx = malloc (sizeof (TestFnCtx)); \
726+
ctx->test_fn = (TestFunc) (_test_fn); \
727+
ctx->dtor = _dtor; \
728+
_TestSuite_AddFull (_suite, \
729+
_name, \
730+
_func, \
731+
_TestSuite_TestFnCtxDtor, \
732+
ctx, \
733+
__VA_ARGS__, \
734+
NULL); \
726735
} while (0)
727736
int
728737
TestSuite_Run (TestSuite *suite);

0 commit comments

Comments
 (0)