Use stack allocation for temporary flex rigidity storage in mj_setConst. Fixes #3081
PiperOrigin-RevId: 871200819 Change-Id: Ifbc1c0bd62261325a06a246cb2adb1106c02f829
This commit is contained in:
committed by
Copybara-Service
parent
989b6e63c7
commit
8024124572
@@ -589,9 +589,12 @@ static void set0(mjModel* m, mjData* d) {
|
||||
mj_setM0(m, d);
|
||||
|
||||
// save flex_rigid, temporarily make all flexes non-rigid
|
||||
mjtByte* rigid = mju_malloc(m->nflex);
|
||||
memcpy(rigid, m->flex_rigid, m->nflex);
|
||||
memset(m->flex_rigid, 0, m->nflex);
|
||||
mjtByte* rigid = NULL;
|
||||
if (m->nflex) {
|
||||
rigid = mjSTACKALLOC(d, m->nflex, mjtByte);
|
||||
memcpy(rigid, m->flex_rigid, m->nflex);
|
||||
memset(m->flex_rigid, 0, m->nflex);
|
||||
}
|
||||
|
||||
// run remaining computations
|
||||
mj_tendon(m, d);
|
||||
@@ -601,8 +604,9 @@ static void set0(mjModel* m, mjData* d) {
|
||||
mj_transmission(m, d);
|
||||
|
||||
// restore flex rigidity
|
||||
memcpy(m->flex_rigid, rigid, m->nflex);
|
||||
mju_free(rigid);
|
||||
if (m->nflex) {
|
||||
memcpy(m->flex_rigid, rigid, m->nflex);
|
||||
}
|
||||
|
||||
// restore camera and light mode
|
||||
for (int i=0; i < m->ncam; i++) {
|
||||
|
||||
Reference in New Issue
Block a user