embind: Don't automatically destroy arguments passed into val calls.#21022
embind: Don't automatically destroy arguments passed into val calls.#21022brendandahl merged 1 commit intoemscripten-core:mainfrom
Conversation
|
Looks like after this change |
88b1154 to
99bb5ae
Compare
Before PR emscripten-core#20383 val's `call` and `operator()` had different behaviors where one would automatically destroy arguments after the call and the other didn't. After that PR, they both called destroy. The automatic destruction wasn't really documented anywhere and and led to some unexpected behavior. This changes it so neither automatically destroys the arguments which I think is more inline with the rest of embind where it's up to the user to handle object lifetimes. Fixes: emscripten-core#21016 and emscripten-core#20095
99bb5ae to
4f88312
Compare
|
Since this 6e54690 "embind: Don't automatically destroy arguments passed into val calls. (#21022)" was merged into 3.1.52, the below test program behaves differently than before, and I wonder whether that's intentional. The test setup is and Until 3.1.51 (also in 3.1.47 and 3.1.48, i.e., irrespective of 12777ca "[emval] Reuse method calling optimisation in regular calls (#20383)" that was merged into 3.1.48 and motivated this change), the browser console logs were That is., the instance of Since 3.1.52, the browser console logs instead are That is, the instance of should from within |
I filed #22575 " Embind regression: Leaked C++ object when calling from C++ to JS" for this now, so it doesn't get lost. |
Before PR #20383 val's
callandoperator()had different behaviors where one would automatically destroy arguments after the call and the other didn't. After that PR, they both called destroy. The automatic destruction wasn't really documented anywhere and and led to some unexpected behavior.This changes it so neither automatically destroys the arguments which I think is more inline with the rest of embind where it's up to the user to handle object lifetimes.
Fixes: #21016 and #20095