Bug 161800 - ASSERTION FAILED: The string being removed is atomic in the string table of an other thread! iterator != atomicStringTable.end() at Source/WTF/wtf/text/AtomicStringImpl.cpp(453)
Summary: ASSERTION FAILED: The string being removed is atomic in the string table of a...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKitGTK (show other bugs)
Version: Other
Hardware: PC Linux
: P2 Normal
Assignee: Michael Catanzaro
URL:
Keywords:
: 164919 (view as bug list)
Depends on:
Blocks:
 
Reported: 2016-09-09 09:43 PDT by Michael Catanzaro
Modified: 2016-11-30 06:09 PST (History)
12 users (show)

See Also:


Attachments
Patch (2.35 KB, patch)
2016-09-13 10:00 PDT, Michael Catanzaro
zan: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Catanzaro 2016-09-09 09:43:00 PDT
This is a regression from within the past month or so. It happens quite often. I need to get a better backtrace.

ASSERTION FAILED: The string being removed is atomic in the string table of an other thread!
iterator != atomicStringTable.end()
../../Source/WTF/wtf/text/AtomicStringImpl.cpp(453) : static void WTF::AtomicStringImpl::remove(WTF::AtomicStringImpl*)
1   0x7fbf665d1d5c /home/mcatanzaro/src/jhbuild/install/lib/libjavascriptcoregtk-4.0.so.18(WTFCrash+0x1e) [0x7fbf665d1d5c]
2   0x7fbf665ffc4e /home/mcatanzaro/src/jhbuild/install/lib/libjavascriptcoregtk-4.0.so.18(_ZN3WTF16AtomicStringImpl6removeEPS0_+0xfe) [0x7fbf665ffc4e]
3   0x7fbf6660a0ad /home/mcatanzaro/src/jhbuild/install/lib/libjavascriptcoregtk-4.0.so.18(_ZN3WTF10StringImplD1Ev+0x9b) [0x7fbf6660a0ad]
4   0x7fbf6660a200 /home/mcatanzaro/src/jhbuild/install/lib/libjavascriptcoregtk-4.0.so.18(_ZN3WTF10StringImpl7destroyEPS0_+0x18) [0x7fbf6660a200]
5   0x7fbf6c1c3666 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3WTF10StringImpl5derefEv+0x2a) [0x7fbf6c1c3666]
6   0x7fbf6c1c6056 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3WTF14derefIfNotNullINS_10StringImplEEEvPT_+0x28) [0x7fbf6c1c6056]
7   0x7fbf6c1c440f /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3WTF6RefPtrINS_10StringImplEED1Ev+0x2f) [0x7fbf6c1c440f]
8   0x7fbf6c1c3742 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3WTF6StringD1Ev+0x18) [0x7fbf6c1c3742]
9   0x7fbf6c1e0a1a /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3WTF12AtomicStringD1Ev+0x18) [0x7fbf6c1e0a1a]
10  0x7fbf5998e1e8 /lib64/libc.so.6(+0x391e8) [0x7fbf5998e1e8]
11  0x7fbf5998e235 /lib64/libc.so.6(+0x39235) [0x7fbf5998e235]
12  0x7fbf6c1f0337 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC10Connection24didFailToSendSyncMessageEv+0x25) [0x7fbf6c1f0337]
13  0x7fbf6c1edcb1 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC10Connection15sendSyncMessageEmSt10unique_ptrINS_7EncoderESt14default_deleteIS2_EENSt6chrono8durationIlSt5ratioILl1ELl1000EEEEN3WTF9OptionSetINS_14SendSyncOptionEEE+0xe5) [0x7fbf6c1edcb1]
14  0x7fbf6c48deb4 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC10Connection8sendSyncIN8Messages15WebProcessProxy15ShouldTerminateEEEbOT_ONS5_5ReplyEmNSt6chrono8durationIlSt5ratioILl1ELl1000EEEEN3WTF9OptionSetINS_14SendSyncOptionEEE+0x120) [0x7fbf6c48deb4]
15  0x7fbf6c484b24 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN6WebKit10WebProcess15shouldTerminateEv+0xc0) [0x7fbf6c484b24]
16  0x7fbf6c22694b /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN6WebKit12ChildProcess21terminationTimerFiredEv+0x23) [0x7fbf6c22694b]
17  0x7fbf6c2268c6 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN6WebKit12ChildProcess17enableTerminationEv+0x80) [0x7fbf6c2268c6]
18  0x7fbf6c484a60 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN6WebKit10WebProcess13removeWebPageEm+0x8e) [0x7fbf6c484a60]
19  0x7fbf6c5f645c /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN6WebKit7WebPage5closeEv+0x46a) [0x7fbf6c5f645c]
20  0x7fbf6c962d77 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC22callMemberFunctionImplIN6WebKit7WebPageEMS2_FvvESt5tupleIJEEJEEEvPT_T0_OT1_St16integer_sequenceImJXspT2_EEE+0x65) [0x7fbf6c962d77]
21  0x7fbf6c961478 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC18callMemberFunctionIN6WebKit7WebPageEMS2_FvvESt5tupleIJEESt16integer_sequenceImJEEEEvOT1_PT_T0_+0x41) [0x7fbf6c961478]
22  0x7fbf6c95d358 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC13handleMessageIN8Messages7WebPage5CloseEN6WebKit7WebPageEMS5_FvvEEEvRNS_7DecoderEPT0_T1_+0x8f) [0x7fbf6c95d358]
23  0x7fbf6c95767a /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN6WebKit7WebPage24didReceiveWebPageMessageERN3IPC10ConnectionERNS1_7DecoderE+0x1d9c) [0x7fbf6c95767a]
24  0x7fbf6c601b62 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN6WebKit7WebPage17didReceiveMessageERN3IPC10ConnectionERNS1_7DecoderE+0x240) [0x7fbf6c601b62]
25  0x7fbf6c20b325 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC18MessageReceiverMap15dispatchMessageERNS_10ConnectionERNS_7DecoderE+0x125) [0x7fbf6c20b325]
26  0x7fbf6c484ca4 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN6WebKit10WebProcess17didReceiveMessageERN3IPC10ConnectionERNS1_7DecoderE+0x4c) [0x7fbf6c484ca4]
27  0x7fbf6c1f04ba /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC10Connection15dispatchMessageERNS_7DecoderE+0x3a) [0x7fbf6c1f04ba]
28  0x7fbf6c1f0624 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC10Connection15dispatchMessageESt10unique_ptrINS_7DecoderESt14default_deleteIS2_EE+0x166) [0x7fbf6c1f0624]
29  0x7fbf6c1f0816 /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(_ZN3IPC10Connection18dispatchOneMessageEv+0xc8) [0x7fbf6c1f0816]
30  0x7fbf6c1f035a /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(+0x4a7135a) [0x7fbf6c1f035a]
31  0x7fbf6c1f6f2e /home/mcatanzaro/src/jhbuild/install/lib/libwebkit2gtk-4.0.so.37(+0x4a77f2e) [0x7fbf6c1f6f2e]
Comment 1 Michael Catanzaro 2016-09-10 17:22:15 PDT
I added a print statement:

if (iterator == atomicStringTable.end())
WTFLogAlways("******%s********", string->utf8(LenientConversion).data());
    ASSERT_WITH_MESSAGE(iterator != atomicStringTable.end(), "The string being removed is atomic in the string table of an other thread!");

The next time I saw the crash, the string printed was "u_projectionMatrix"

That's a local variable in WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp. I have no clue what this file is doing, but it looks like some serious black magic.
Comment 2 Michael Catanzaro 2016-09-10 17:23:11 PDT
(In reply to comment #1)
> The next time I saw the crash, the string printed was "u_projectionMatrix"

Looks like it's always this string.
Comment 3 Zan Dobersek 2016-09-12 23:26:44 PDT
On what thread is the assertion occurring?

These AtomicString objects should be constructed on the composition thread, and added to the AtomicString table for that thread.

I assume the destruction of these is happening on the main thread, via at-exit handlers.

Using static NeverDestroyed<AtomicString> objects would probably fix this.
Comment 4 Michael Catanzaro 2016-09-13 09:50:26 PDT
(In reply to comment #3)
> On what thread is the assertion occurring?

The main thread.

> These AtomicString objects should be constructed on the composition thread,
> and added to the AtomicString table for that thread.

Sad.

> I assume the destruction of these is happening on the main thread, via
> at-exit handlers.

Yes.

> Using static NeverDestroyed<AtomicString> objects would probably fix this.

OK, probably!
Comment 5 Michael Catanzaro 2016-09-13 10:00:18 PDT
Created attachment 288692 [details]
Patch
Comment 6 Zan Dobersek 2016-09-13 10:59:38 PDT
Comment on attachment 288692 [details]
Patch

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

> Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.h:35
> +#define TEXMAP_DECLARE_VARIABLE(Accessor, Name, Type) GC3Duint Accessor##Location() { static NeverDestroyed<const AtomicString> name(Name); return getLocation(name.get(), Type); }

AtomicString::ConstructFromLiteral should be passed as the second argument to the constructor. I think all the strings used with the macro are literals.
Comment 7 Michael Catanzaro 2016-09-16 19:55:21 PDT
Committed r206061: <http://trac.webkit.org/changeset/206061>
Comment 8 Michael Catanzaro 2016-11-30 06:09:22 PST
*** Bug 164919 has been marked as a duplicate of this bug. ***