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);
|
mj_setM0(m, d);
|
||||||
|
|
||||||
// save flex_rigid, temporarily make all flexes non-rigid
|
// save flex_rigid, temporarily make all flexes non-rigid
|
||||||
mjtByte* rigid = mju_malloc(m->nflex);
|
mjtByte* rigid = NULL;
|
||||||
memcpy(rigid, m->flex_rigid, m->nflex);
|
if (m->nflex) {
|
||||||
memset(m->flex_rigid, 0, 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
|
// run remaining computations
|
||||||
mj_tendon(m, d);
|
mj_tendon(m, d);
|
||||||
@@ -601,8 +604,9 @@ static void set0(mjModel* m, mjData* d) {
|
|||||||
mj_transmission(m, d);
|
mj_transmission(m, d);
|
||||||
|
|
||||||
// restore flex rigidity
|
// restore flex rigidity
|
||||||
memcpy(m->flex_rigid, rigid, m->nflex);
|
if (m->nflex) {
|
||||||
mju_free(rigid);
|
memcpy(m->flex_rigid, rigid, m->nflex);
|
||||||
|
}
|
||||||
|
|
||||||
// restore camera and light mode
|
// restore camera and light mode
|
||||||
for (int i=0; i < m->ncam; i++) {
|
for (int i=0; i < m->ncam; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user