Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(447)

Side by Side Diff: Source/platform/heap/ThreadState.cpp

Issue 351253002: [oilpan]: Don't sweep while in safepoint. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: review feedback Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 ASSERT(!state->isSweepInProgress()); 191 ASSERT(!state->isSweepInProgress());
192 if (!acquireLoad(&m_canResume)) { 192 if (!acquireLoad(&m_canResume)) {
193 // If we are leaving the safepoint from a SafePointAwareMutexLocker 193 // If we are leaving the safepoint from a SafePointAwareMutexLocker
194 // call out to release the lock before going to sleep. This enables the 194 // call out to release the lock before going to sleep. This enables the
195 // lock to be acquired in the sweep phase, e.g. during weak processi ng 195 // lock to be acquired in the sweep phase, e.g. during weak processi ng
196 // or finalization. The SafePointAwareLocker will reenter the safepo int 196 // or finalization. The SafePointAwareLocker will reenter the safepo int
197 // and reacquire the lock after leaving this safepoint. 197 // and reacquire the lock after leaving this safepoint.
198 if (locker) 198 if (locker)
199 locker->reset(); 199 locker->reset();
200 pushAllRegisters(this, state, parkAfterPushRegisters); 200 pushAllRegisters(this, state, parkAfterPushRegisters);
201 state->performPendingSweep();
202 } 201 }
203 } 202 }
204 203
205 void enterSafePoint(ThreadState* state) 204 void enterSafePoint(ThreadState* state)
206 { 205 {
207 ASSERT(!state->isSweepInProgress()); 206 ASSERT(!state->isSweepInProgress());
208 pushAllRegisters(this, state, enterSafePointAfterPushRegisters); 207 pushAllRegisters(this, state, enterSafePointAfterPushRegisters);
209 } 208 }
210 209
211 void leaveSafePoint(ThreadState* state, SafePointAwareMutexLocker* locker = 0) 210 void leaveSafePoint(ThreadState* state, SafePointAwareMutexLocker* locker = 0)
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 void ThreadState::safePoint(StackState stackState) 750 void ThreadState::safePoint(StackState stackState)
752 { 751 {
753 checkThread(); 752 checkThread();
754 performPendingGC(stackState); 753 performPendingGC(stackState);
755 ASSERT(!m_atSafePoint); 754 ASSERT(!m_atSafePoint);
756 m_stackState = stackState; 755 m_stackState = stackState;
757 m_atSafePoint = true; 756 m_atSafePoint = true;
758 s_safePointBarrier->checkAndPark(this); 757 s_safePointBarrier->checkAndPark(this);
759 m_atSafePoint = false; 758 m_atSafePoint = false;
760 m_stackState = HeapPointersOnStack; 759 m_stackState = HeapPointersOnStack;
760 performPendingSweep();
761 } 761 }
762 762
763 #ifdef ADDRESS_SANITIZER 763 #ifdef ADDRESS_SANITIZER
764 // When we are running under AddressSanitizer with detect_stack_use_after_return =1 764 // When we are running under AddressSanitizer with detect_stack_use_after_return =1
765 // then stack marker obtained from SafePointScope will point into a fake stack. 765 // then stack marker obtained from SafePointScope will point into a fake stack.
766 // Detect this case by checking if it falls in between current stack frame 766 // Detect this case by checking if it falls in between current stack frame
767 // and stack start and use an arbitrary high enough value for it. 767 // and stack start and use an arbitrary high enough value for it.
768 // Don't adjust stack marker in any other case to match behavior of code running 768 // Don't adjust stack marker in any other case to match behavior of code running
769 // without AddressSanitizer. 769 // without AddressSanitizer.
770 NO_SANITIZE_ADDRESS static void* adjustScopeMarkerForAdressSanitizer(void* scope Marker) 770 NO_SANITIZE_ADDRESS static void* adjustScopeMarkerForAdressSanitizer(void* scope Marker)
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 threadAttachMutex().unlock(); 915 threadAttachMutex().unlock();
916 return gcInfo; 916 return gcInfo;
917 } 917 }
918 } 918 }
919 if (needLockForIteration) 919 if (needLockForIteration)
920 threadAttachMutex().unlock(); 920 threadAttachMutex().unlock();
921 return 0; 921 return 0;
922 } 922 }
923 #endif 923 #endif
924 } 924 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698