[webkit-reviews] review granted: [Bug 169855] Crash when breakpoint hit in unload handler : [Attachment 333662] patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Feb 12 21:08:26 PST 2018


Daniel Bates <dbates at webkit.org> has granted Antti Koivisto <koivisto at iki.fi>'s
request for review:
Bug 169855: Crash when breakpoint hit in unload handler
https://bugs.webkit.org/show_bug.cgi?id=169855

Attachment 333662: patch

https://bugs.webkit.org/attachment.cgi?id=333662&action=review




--- Comment #5 from Daniel Bates <dbates at webkit.org> ---
Comment on attachment 333662
  --> https://bugs.webkit.org/attachment.cgi?id=333662
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=333662&action=review

Looks sane to me.

r=me

> Source/WebCore/ChangeLog:11
> +	   CachedRawResource::updateBuffer may generate unload event in client
notify callback. If Inspector was

CachedRawResource::updateBuffer => updateBuffer()

> Source/WebCore/ChangeLog:12
> +	   paused, this even would spawn a nested runloop.
CachedRawResource::finishLoading would get called in

CachedRawResource::finishLoading => CachedRawResource::finishLoading()

> Source/WebCore/ChangeLog:20
> +	   Set a bit when entering the client callback.
> +	   Ensure we don't re-enter updateBuffer.
> +	   If finishLoading got delayed during client callback, do it at the
end.

This is OK as-is. I do not see the need to put each sentence on its own line. I
suggest you removing the newlines and use the same approach as you did when
writing the description for this ChangeLog and break long lines around 100
characters.

> Source/WebCore/loader/cache/CachedRawResource.cpp:59
> +    // Skip any updateBuffers triggered from nested runloops. We'll have
complete buffer in finishLoading.

have => have the
updateBuffers => updateBuffers()
finishLoading => finishLoading()

> Source/WebCore/loader/cache/CachedRawResource.cpp:84
> +	   auto buffer = WTFMove(m_delayedFinishLoadingData->buffer);
> +	   m_delayedFinishLoadingData = std::nullopt;
> +	   finishLoading(buffer.get());

I would have written this as:

auto delayedFinishLoadingData = std::exchange(m_delayedFinishLoadingData,
std::nullopt);
finishLoading(delayedFinishLoadingData->buffer.get());

> Source/WebCore/loader/cache/CachedRawResource.h:96
> +    struct DelayedFinishLoadingData {
> +	   RefPtr<SharedBuffer> buffer;
> +    };

I take it you feel that this struct improves the readability of the code or
makes the code less error prone as opposed to using
std::optional<RefPtr<SharedBuffer>> or defining DelayedFinishLoadingData to be
a type alias for RefPtr<SharedBuffer>.


More information about the webkit-reviews mailing list