WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 174811
GC should be fine with trading blocks between destructor and non-destructor blocks
https://bugs.webkit.org/show_bug.cgi?id=174811
Summary
GC should be fine with trading blocks between destructor and non-destructor b...
Filip Pizlo
Reported
2017-07-24 21:01:00 PDT
Patch forthcoming.
Attachments
might be done
(16.55 KB, patch)
2017-07-24 21:09 PDT
,
Filip Pizlo
no flags
Details
Formatted Diff
Diff
the patch
(20.51 KB, patch)
2017-07-24 21:48 PDT
,
Filip Pizlo
mark.lam
: review+
Details
Formatted Diff
Diff
Show Obsolete
(1)
View All
Add attachment
proposed patch, testcase, etc.
Filip Pizlo
Comment 1
2017-07-24 21:09:05 PDT
Created
attachment 316350
[details]
might be done
Filip Pizlo
Comment 2
2017-07-24 21:48:11 PDT
Created
attachment 316351
[details]
the patch
Build Bot
Comment 3
2017-07-24 21:51:37 PDT
Attachment 316351
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:28: Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted. [build/include_order] [4] Total errors found: 1 in 5 files If any of these errors are false positives, please file a bug against check-webkit-style.
Filip Pizlo
Comment 4
2017-07-24 21:53:25 PDT
Comment on
attachment 316351
[details]
the patch View in context:
https://bugs.webkit.org/attachment.cgi?id=316351&action=review
> Source/JavaScriptCore/heap/MarkedBlock.cpp:46 > + > +#include <wtf/Assertions.h> > + > +namespace { > + > +NO_RETURN_DUE_TO_CRASH NEVER_INLINE void crash() > +{ > + CRASH(); > +} > + > +#undef RELEASE_ASSERT > +#define RELEASE_ASSERT(assertion) do { \ > + if (!(assertion)) { \ > + WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \ > + crash(); \ > + } \ > +} while (0) > + > +} // anonymous namespace > +
I'll remove this.
Mark Lam
Comment 5
2017-07-25 09:44:34 PDT
Comment on
attachment 316351
[details]
the patch View in context:
https://bugs.webkit.org/attachment.cgi?id=316351&action=review
r=me
> Source/JavaScriptCore/heap/MarkedBlockInlines.h:330 > + specializedSweep<true, NotEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale>(freeList, IsEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale, destroyFunc); > + return true; > + case MarksStale: > + specializedSweep<true, NotEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale>(freeList, IsEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale, destroyFunc); > + return true; > + } > + case SweepToFreeList: > + switch (marksMode) { > + case MarksNotStale: > + specializedSweep<true, NotEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale>(freeList, IsEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale, destroyFunc); > + return true; > + case MarksStale: > + specializedSweep<true, NotEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale>(freeList, IsEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale, destroyFunc);
Behavior-wise, it doesn't matter that you pass "IsEmpty" for the emptyMode (2nd argument) because it will get overridden to NotEmpty in specializedSweep() because the specialize flag is true. However, for consistency, I think we should pass NotEmpty given that we know that the block's emptyMode is NotEmpty.
Filip Pizlo
Comment 6
2017-07-25 18:15:44 PDT
(In reply to Mark Lam from
comment #5
)
> Comment on
attachment 316351
[details]
> the patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=316351&action=review
> > r=me > > > Source/JavaScriptCore/heap/MarkedBlockInlines.h:330 > > + specializedSweep<true, NotEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale>(freeList, IsEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale, destroyFunc); > > + return true; > > + case MarksStale: > > + specializedSweep<true, NotEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale>(freeList, IsEmpty, SweepOnly, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale, destroyFunc); > > + return true; > > + } > > + case SweepToFreeList: > > + switch (marksMode) { > > + case MarksNotStale: > > + specializedSweep<true, NotEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale>(freeList, IsEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksNotStale, destroyFunc); > > + return true; > > + case MarksStale: > > + specializedSweep<true, NotEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale>(freeList, IsEmpty, SweepToFreeList, BlockHasDestructors, DontScribble, DoesNotHaveNewlyAllocated, MarksStale, destroyFunc); > > Behavior-wise, it doesn't matter that you pass "IsEmpty" for the emptyMode > (2nd argument) because it will get overridden to NotEmpty in > specializedSweep() because the specialize flag is true. However, for > consistency, I think we should pass NotEmpty given that we know that the > block's emptyMode is NotEmpty.
Fixed!
Filip Pizlo
Comment 7
2017-07-25 18:20:47 PDT
Landed in
https://trac.webkit.org/changeset/219897/webkit
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug