mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-25 00:36:16 +00:00
lib/drmtest: don't complete fixtures with a longjmp
Longjmp creates havoc with stack variables of the current stackframe. And since fixtures should be used to set up such variables creating havoc isn't a great idea. With this I can revert a bunch of bogus patches I've done to paper over this by moving stack variables to be global. The same issue is actually a feature for subtest blocks since subtests should be independant anyway. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
cf93ba45b0
commit
8869e1e628
@ -666,6 +666,11 @@ bool __igt_fixture(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
void __igt_fixture_complete(void)
|
||||
{
|
||||
in_fixture = false;
|
||||
}
|
||||
|
||||
void __igt_fixture_end(void)
|
||||
{
|
||||
assert(in_fixture);
|
||||
|
@ -184,6 +184,7 @@ void igt_exit(void) __attribute__((noreturn));
|
||||
#define igt_require(expr) do { if (!(expr)) __igt_skip_check(__FILE__, __LINE__, __func__, #expr ); } while (0)
|
||||
|
||||
bool __igt_fixture(void);
|
||||
void __igt_fixture_complete(void);
|
||||
void __igt_fixture_end(void) __attribute__((noreturn));
|
||||
/**
|
||||
* igt_fixture - annote global test fixture code
|
||||
@ -193,9 +194,12 @@ void __igt_fixture_end(void) __attribute__((noreturn));
|
||||
* enumeration (e.g. when enumerating on systemes without an intel gpu) such
|
||||
* blocks should be annotated with igt_fixture.
|
||||
*/
|
||||
#define igt_fixture for (; __igt_fixture() && \
|
||||
#define igt_fixture for (int igt_tokencat(__tmpint,__LINE__) = 0; \
|
||||
igt_tokencat(__tmpint,__LINE__) < 1 && \
|
||||
__igt_fixture() && \
|
||||
(setjmp(igt_subtest_jmpbuf) == 0); \
|
||||
__igt_fixture_end())
|
||||
igt_tokencat(__tmpint,__LINE__) ++, \
|
||||
__igt_fixture_complete())
|
||||
|
||||
/* check functions which auto-skip tests by calling igt_skip() */
|
||||
void gem_require_caching(int fd);
|
||||
|
Loading…
x
Reference in New Issue
Block a user