SharedArrayBuffer: cloning vs transferring?

# Axel Rauschmayer (7 years ago)

AFAICT, all current implementations want you to transfer SABs. What’s the best way to prepare for the future? try transferring and clone in the catch clause?

Thanks!

Axel

-- Dr. Axel Rauschmayer rauschma.de [Sent from a mobile device, please forgive brevity and typos]

# Lars Hansen (7 years ago)

You're asking about how postMessage() handles a SharedArrayBuffer, since the spec changed last summer from requiring the buffer to be in the transfer list to forbidding it. For the time being, Firefox allows the SAB to be in the transfer list but prints a warning in the console; by and by we will throw an error for that (and until then we'll fail any test cases that test for an exception). This is implemented in Firefox 51, if my testing right now is correct.

Since no browser has officially shipped this functionality I think some browser sniffing may be reasonable for early adopters who want to operate in a multi-browser setting. I would expect that when this functionality is enabled by default in a browser the browser would adhere to the spec.

# Axel Rauschmayer (7 years ago)

Thanks! This worked for me for a toy example (for multiple calls, I’d record whether an exception was thrown during the first try):

try {
    // Try new API (clone)
    worker.postMessage({sharedBuffer});
} catch (e) {
    // Fall back to old API (transfer)
    worker.postMessage({sharedBuffer}, [sharedBuffer]);
}

Complete source code: rauschma/shared-array-buffer-demo/blob/master/main.js

Axel

# Lars Hansen (7 years ago)

If you encounter a most-current-release browser that requires the transfer form of postmessage, could you follow up here so that I can bug the appropriate person about it? Thanks.

# Axel Rauschmayer (7 years ago)

Will do!