if (!abuf || abuf->detached)
return;
- if (abuf->free_func)
+ if (abuf->free_func) {
abuf->free_func(ctx->rt, abuf->opaque, abuf->data);
+ /* The backing data has been released. Do not release it again when
+ the detached ArrayBuffer object is later finalized. */
+ abuf->free_func = NULL;
+ abuf->opaque = NULL;
+ }
abuf->data = NULL;
abuf->byte_length = 0;
abuf->detached = TRUE;
abuf->data = NULL;
abuf->byte_length = 0;
abuf->detached = TRUE;
+ abuf->free_func = NULL;
+ abuf->opaque = NULL;
js_array_buffer_update_typed_arrays(abuf);
}
if (magic == JS_ARRAY_BUFFER_TRANSFER_TO_IMMUTABLE && !JS_IsException(res)) {