| Index: Source/wtf/ArrayBuffer.cpp
|
| diff --git a/Source/wtf/ArrayBuffer.cpp b/Source/wtf/ArrayBuffer.cpp
|
| index d5b0a2474e5d6ab1796f6561fd75511c2a1f8d3f..dad6abf33c046b864a200862329b9eb12e3f9166 100644
|
| --- a/Source/wtf/ArrayBuffer.cpp
|
| +++ b/Source/wtf/ArrayBuffer.cpp
|
| @@ -43,12 +43,25 @@ bool ArrayBuffer::transfer(ArrayBufferContents& result, Vector<RefPtr<ArrayBuffe
|
| return false;
|
| }
|
|
|
| - m_contents.transfer(result);
|
| + bool allViewsAreNeuterable = true;
|
| + for (ArrayBufferView* i = m_firstView; i; i = i->m_nextView) {
|
| + if (!i->isNeuterable())
|
| + allViewsAreNeuterable = false;
|
| + }
|
| +
|
| + if (allViewsAreNeuterable) {
|
| + m_contents.transfer(result);
|
| + } else {
|
| + m_contents.copyTo(result);
|
| + if (!result.data())
|
| + return false;
|
| + }
|
|
|
| while (m_firstView) {
|
| ArrayBufferView* current = m_firstView;
|
| removeView(current);
|
| - current->neuter();
|
| + if (allViewsAreNeuterable || current->isNeuterable())
|
| + current->neuter();
|
| neuteredViews.append(current);
|
| }
|
|
|
|
|