Bug 37120

Summary: ASSERT close()ing the same StorageAreaImpl twice when using multiple PageGroups
Product: WebKit Reporter: Brady Eidson <beidson>
Component: WebCore Misc.Assignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal Keywords: InRadar
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Attachments:
Description Flags
Early return instead of ASSERT oliver: review+, beidson: commit-queue-

Description Brady Eidson 2010-04-05 15:40:39 PDT
ASSERT close()ing the same StorageAreaImpl twice when using multiple PageGroups

If you use multiple PageGroups and point them both to the same path for LocalStorage, you can get an ASSERT closing the same storage area twice:
    ASSERT(!m_isShutdown);
#0	0x102938f3e in WebCore::StorageNamespaceImpl::close at StorageNamespaceImpl.cpp:122
#1	0x102740fc5 in WebCore::PageGroup::closeLocalStorage at PageGroup.cpp:106
#2	0x101adf881 in +[WebView _applicationWillTerminate] at WebView.mm:2482

I've traced through what happens when you *do* try to close it twice, and it appears there's no ill effects.  But it actually ends up trying to do synchronous I/O just to support the second close, which is a waste.

The ASSERT is invalid - we thought this case shouldn't happen, but it clearly can.  It should just be an early return instead.

In radar as <rdar://problem/7828420>
Comment 1 Brady Eidson 2010-04-05 15:44:44 PDT
Created attachment 52583 [details]
Early return instead of ASSERT
Comment 2 Oliver Hunt 2010-04-05 15:52:01 PDT
Comment on attachment 52583 [details]
Early return instead of ASSERT

r=me
Comment 3 Brady Eidson 2010-04-05 15:57:24 PDT
http://trac.webkit.org/changeset/57099