Closed Bug 1122467 Opened 5 years ago Closed 5 years ago

SAB: What happens when a TypedArray constructor is presented with a SharedArrayBuffer or SharedTypedArray?


(Core :: JavaScript Engine, defect)

Not set





(Reporter: lth, Assigned: lth)


(Blocks 1 open bug)


(Also see bug 1122338.)
(Also see bug 1084248; the current shared code probably complicates things.)

When a TypedArray constructor is presented with a SharedArrayBuffer or SharedTypedArray it treats the input as the generic "Array-like" case and constructs a new non-shared ArrayBuffer and then copies elements from 0..length-1 from the argument object to that ArrayBuffer.  (For SharedArrayBuffer the length will normally be zero since there is no "length" property.)

The opposite case, presenting a SharedTypedArray constructor with an ArrayBuffer or TypedArray, will result in an error being thrown.

This bug has two parts: (1) figure out what the most desirable behavior is and (2) write code and test cases to implement that.
The SharedTypedArray code only allows for two general cases,

  new SharedInt32Array([length])
  new SharedInt32Array(SharedArrayBuffer, [offset, [length]])

Specifically it disallows the copy-from-random-object semantics of the TypedArray constructors, since that is thought to be of low utility and almost certainly not what is wanted.

As noted in comment #0, the TypedArray code allows the object in the second case above to be any Array-like object, even defaulting object.length to zero if it is not present.

There's probably a reasonable case to be made for the object argument to a TypedArray constructor to be a SharedTypedArray object, with the meaning that shared data is being copied into private data, and that copying works now.  (There's the question of how that copy is done: if done byte-by-byte, say, the copy may experience word tearing if there are concurrent updates to the shared memory, and that would be wrong for multi-byte data.  If that is being done correctly already it's probably a little bit accidental.)

The only case for allowing the object argument to a TypedArray constructor to be a SharedArrayBuffer is uniformity with the rest of the language.
The spec has changed, SharedTypedArray is going away.
Closed: 5 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.