Add mj_markStack and mj_freeStack as public API functions.
Also add asan instrumentation to detect stack frame leakages (i.e. `mj_markStack` without a corresponding `mj_freeStack` in the same caller function). PiperOrigin-RevId: 562625645 Change-Id: I4e3ff66ca0b9d08ed0a95cef45393db8e3053e22
This commit is contained in:
committed by
Copybara-Service
parent
9308e1d383
commit
94a8705ad0
@@ -730,6 +730,11 @@ void mj_printModel(const mjModel* m, const char* filename) {
|
||||
// valid printf-style format string for a single float value
|
||||
void mj_printFormattedData(const mjModel* m, mjData* d, const char* filename,
|
||||
const char* float_format) {
|
||||
// stack in use, SHOULD NOT OCCUR
|
||||
if (d->pstack) {
|
||||
mjERROR("attempting to print mjData when stack is in use");
|
||||
}
|
||||
|
||||
mjtNum *M;
|
||||
mjMARKSTACK;
|
||||
|
||||
@@ -739,11 +744,6 @@ void mj_printFormattedData(const mjModel* m, mjData* d, const char* filename,
|
||||
float_format = FLOAT_FORMAT;
|
||||
}
|
||||
|
||||
// stack in use, SHOULD NOT OCCUR
|
||||
if (d->pstack) {
|
||||
mjERROR("attempting to print mjData when stack is in use");
|
||||
}
|
||||
|
||||
// get file
|
||||
FILE* fp;
|
||||
if (filename) {
|
||||
@@ -776,7 +776,9 @@ void mj_printFormattedData(const mjModel* m, mjData* d, const char* filename,
|
||||
|
||||
fprintf(fp, "SIZES\n");
|
||||
#define X(type, name) \
|
||||
if (strcmp(#name, "pstack") != 0 && strcmp(#name, "parena") != 0) { \
|
||||
if (strcmp(#name, "pstack") != 0 && \
|
||||
strcmp(#name, "pbase") != 0 && \
|
||||
strcmp(#name, "parena") != 0) { \
|
||||
const char* format = _Generic( \
|
||||
d->name, \
|
||||
int : INT_FORMAT, \
|
||||
|
||||
Reference in New Issue
Block a user