@@ -163,29 +163,8 @@ class EventSourceImpl final : public nsIObserver,
163
163
mEventSource ->mReadyState = aReadyState;
164
164
}
165
165
166
- bool IsFrozen () {
167
- MutexAutoLock lock (mMutex );
168
- return mFrozen ;
169
- }
170
-
171
- void SetFrozen (bool aFrozen) {
172
- MutexAutoLock lock (mMutex );
173
- mFrozen = aFrozen;
174
- }
175
-
176
166
bool IsClosed () { return ReadyState () == CLOSED; }
177
167
178
- void ShutDown () {
179
- MutexAutoLock lock (mMutex );
180
- MOZ_ASSERT (!mIsShutDown );
181
- mIsShutDown = true ;
182
- }
183
-
184
- bool IsShutDown () {
185
- MutexAutoLock lock (mMutex );
186
- return mIsShutDown ;
187
- }
188
-
189
168
RefPtr<EventSource> mEventSource ;
190
169
191
170
/* *
@@ -270,18 +249,18 @@ class EventSourceImpl final : public nsIObserver,
270
249
// EventSourceImpl internal states.
271
250
// WorkerRef to keep the worker alive. (accessed on worker thread only)
272
251
RefPtr<ThreadSafeWorkerRef> mWorkerRef ;
273
- // This mutex protects mServiceNotifier, mFrozen and mEventSource->mReadyState
274
- // that are used in different threads.
252
+ // This mutex protects mServiceNotifier and mEventSource->mReadyState that are
253
+ // used in different threads.
275
254
mozilla::Mutex mMutex ;
276
255
// Whether the window is frozen. May be set on main thread and read on target
277
- // thread. Use mMutex to protect it before accessing it.
278
- bool mFrozen ;
256
+ // thread.
257
+ Atomic< bool > mFrozen ;
279
258
// There are some messages are going to be dispatched when thaw.
280
259
bool mGoingToDispatchAllMessages ;
281
260
// Whether the EventSource is run on main thread.
282
- bool mIsMainThread ;
261
+ const bool mIsMainThread ;
283
262
// Whether the EventSourceImpl is going to be destroyed.
284
- bool mIsShutDown ;
263
+ Atomic< bool > mIsShutDown ;
285
264
286
265
class EventSourceServiceNotifier final {
287
266
public:
@@ -390,9 +369,6 @@ EventSourceImpl::EventSourceImpl(EventSource* aEventSource,
390
369
mCookieJarSettings(aCookieJarSettings),
391
370
mTargetThread(NS_GetCurrentThread()) {
392
371
MOZ_ASSERT (mEventSource );
393
- if (!mIsMainThread ) {
394
- mEventSource ->mIsMainThread = false ;
395
- }
396
372
SetReadyState (CONNECTING);
397
373
}
398
374
@@ -445,7 +421,8 @@ void EventSourceImpl::CloseInternal() {
445
421
mServiceNotifier = nullptr ;
446
422
}
447
423
448
- if (IsShutDown ()) {
424
+ MOZ_ASSERT (!mIsShutDown );
425
+ if (mIsShutDown ) {
449
426
return ;
450
427
}
451
428
@@ -466,7 +443,7 @@ void EventSourceImpl::CloseInternal() {
466
443
while (mMessagesToDispatch .GetSize () != 0 ) {
467
444
delete mMessagesToDispatch .PopFront ();
468
445
}
469
- SetFrozen ( false ) ;
446
+ mFrozen = false ;
470
447
ResetDecoder ();
471
448
mUnicodeDecoder = nullptr ;
472
449
// Release the object on its owner. Don't access to any members
@@ -479,7 +456,8 @@ void EventSourceImpl::CleanupOnMainThread() {
479
456
MOZ_ASSERT (IsClosed ());
480
457
481
458
// Call ShutDown before cleaning any members.
482
- ShutDown ();
459
+ MOZ_ASSERT (!mIsShutDown );
460
+ mIsShutDown = true ;
483
461
484
462
if (mIsMainThread ) {
485
463
RemoveWindowObservers ();
@@ -569,7 +547,7 @@ class ConnectRunnable final : public WorkerMainThreadRunnable {
569
547
570
548
nsresult EventSourceImpl::ParseURL (const nsAString& aURL) {
571
549
AssertIsOnMainThread ();
572
- MOZ_ASSERT (!IsShutDown () );
550
+ MOZ_ASSERT (!mIsShutDown );
573
551
// get the src
574
552
nsCOMPtr<nsIURI> baseURI;
575
553
nsresult rv = GetBaseURI (getter_AddRefs (baseURI));
@@ -600,7 +578,7 @@ nsresult EventSourceImpl::ParseURL(const nsAString& aURL) {
600
578
nsresult EventSourceImpl::AddWindowObservers () {
601
579
AssertIsOnMainThread ();
602
580
MOZ_ASSERT (mIsMainThread );
603
- MOZ_ASSERT (!IsShutDown () );
581
+ MOZ_ASSERT (!mIsShutDown );
604
582
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService ();
605
583
NS_ENSURE_STATE (os);
606
584
@@ -773,7 +751,7 @@ nsresult EventSourceImpl::StreamReaderFunc(nsIInputStream* aInputStream,
773
751
return NS_ERROR_FAILURE;
774
752
}
775
753
thisObject->AssertIsOnTargetThread ();
776
- MOZ_ASSERT (!thisObject->IsShutDown () );
754
+ MOZ_ASSERT (!thisObject->mIsShutDown );
777
755
thisObject->ParseSegment ((const char *)aFromRawSegment, aCount);
778
756
*aWriteCount = aCount;
779
757
return NS_OK;
@@ -972,7 +950,7 @@ EventSourceImpl::IsOnCurrentThreadInfallible() { return IsTargetThread(); }
972
950
973
951
nsresult EventSourceImpl::GetBaseURI (nsIURI** aBaseURI) {
974
952
AssertIsOnMainThread ();
975
- MOZ_ASSERT (!IsShutDown () );
953
+ MOZ_ASSERT (!mIsShutDown );
976
954
NS_ENSURE_ARG_POINTER (aBaseURI);
977
955
978
956
*aBaseURI = nullptr ;
@@ -1001,7 +979,7 @@ nsresult EventSourceImpl::GetBaseURI(nsIURI** aBaseURI) {
1001
979
1002
980
void EventSourceImpl::SetupHttpChannel () {
1003
981
AssertIsOnMainThread ();
1004
- MOZ_ASSERT (!IsShutDown () );
982
+ MOZ_ASSERT (!mIsShutDown );
1005
983
nsresult rv = mHttpChannel ->SetRequestMethod (" GET" _ns);
1006
984
MOZ_ASSERT (NS_SUCCEEDED(rv));
1007
985
@@ -1030,7 +1008,7 @@ void EventSourceImpl::SetupHttpChannel() {
1030
1008
nsresult EventSourceImpl::SetupReferrerInfo (
1031
1009
const nsCOMPtr<Document>& aDocument) {
1032
1010
AssertIsOnMainThread ();
1033
- MOZ_ASSERT (!IsShutDown () );
1011
+ MOZ_ASSERT (!mIsShutDown );
1034
1012
1035
1013
if (aDocument) {
1036
1014
auto referrerInfo = MakeRefPtr<ReferrerInfo>(*aDocument);
@@ -1270,7 +1248,7 @@ nsresult EventSourceImpl::PrintErrorOnConsole(
1270
1248
const char * aBundleURI, const char * aError,
1271
1249
const nsTArray<nsString>& aFormatStrings) {
1272
1250
AssertIsOnMainThread ();
1273
- MOZ_ASSERT (!IsShutDown () );
1251
+ MOZ_ASSERT (!mIsShutDown );
1274
1252
nsCOMPtr<nsIStringBundleService> bundleService =
1275
1253
mozilla::services::GetStringBundleService ();
1276
1254
NS_ENSURE_STATE (bundleService);
@@ -1311,7 +1289,7 @@ nsresult EventSourceImpl::PrintErrorOnConsole(
1311
1289
1312
1290
nsresult EventSourceImpl::ConsoleError () {
1313
1291
AssertIsOnMainThread ();
1314
- MOZ_ASSERT (!IsShutDown () );
1292
+ MOZ_ASSERT (!mIsShutDown );
1315
1293
nsAutoCString targetSpec;
1316
1294
nsresult rv = mSrc ->GetSpec (targetSpec);
1317
1295
NS_ENSURE_SUCCESS (rv, rv);
@@ -1380,7 +1358,7 @@ NS_IMETHODIMP EventSourceImpl::Notify(nsITimer* aTimer) {
1380
1358
1381
1359
MOZ_ASSERT (!mHttpChannel , " the channel hasn't been cancelled!!" );
1382
1360
1383
- if (!IsFrozen () ) {
1361
+ if (!mFrozen ) {
1384
1362
nsresult rv = InitChannelAndRequestEventSource (mIsMainThread );
1385
1363
if (NS_FAILED(rv)) {
1386
1364
NS_WARNING (" InitChannelAndRequestEventSource() failed" );
@@ -1391,13 +1369,13 @@ NS_IMETHODIMP EventSourceImpl::Notify(nsITimer* aTimer) {
1391
1369
1392
1370
nsresult EventSourceImpl::Thaw () {
1393
1371
AssertIsOnMainThread ();
1394
- if (IsClosed () || !IsFrozen () ) {
1372
+ if (IsClosed () || !mFrozen ) {
1395
1373
return NS_OK;
1396
1374
}
1397
1375
1398
1376
MOZ_ASSERT (!mHttpChannel , " the connection hasn't been closed!!!" );
1399
1377
1400
- SetFrozen ( false ) ;
1378
+ mFrozen = false ;
1401
1379
nsresult rv;
1402
1380
if (!mGoingToDispatchAllMessages && mMessagesToDispatch .GetSize () > 0 ) {
1403
1381
nsCOMPtr<nsIRunnable> event =
@@ -1419,18 +1397,18 @@ nsresult EventSourceImpl::Thaw() {
1419
1397
1420
1398
nsresult EventSourceImpl::Freeze () {
1421
1399
AssertIsOnMainThread ();
1422
- if (IsClosed () || IsFrozen () ) {
1400
+ if (IsClosed () || mFrozen ) {
1423
1401
return NS_OK;
1424
1402
}
1425
1403
1426
1404
MOZ_ASSERT (!mHttpChannel , " the connection hasn't been closed!!!" );
1427
- SetFrozen ( true ) ;
1405
+ mFrozen = true ;
1428
1406
return NS_OK;
1429
1407
}
1430
1408
1431
1409
nsresult EventSourceImpl::DispatchCurrentMessageEvent () {
1432
1410
AssertIsOnTargetThread ();
1433
- MOZ_ASSERT (!IsShutDown () );
1411
+ MOZ_ASSERT (!mIsShutDown );
1434
1412
UniquePtr<Message> message (std::move (mCurrentMessage ));
1435
1413
ClearFields ();
1436
1414
@@ -1467,7 +1445,7 @@ void EventSourceImpl::DispatchAllMessageEvents() {
1467
1445
AssertIsOnTargetThread ();
1468
1446
mGoingToDispatchAllMessages = false ;
1469
1447
1470
- if (IsClosed () || IsFrozen () ) {
1448
+ if (IsClosed () || mFrozen ) {
1471
1449
return ;
1472
1450
}
1473
1451
@@ -1532,7 +1510,7 @@ void EventSourceImpl::DispatchAllMessageEvents() {
1532
1510
return ;
1533
1511
}
1534
1512
1535
- if (IsClosed () || IsFrozen () ) {
1513
+ if (IsClosed () || mFrozen ) {
1536
1514
return ;
1537
1515
}
1538
1516
}
@@ -1546,7 +1524,7 @@ void EventSourceImpl::ClearFields() {
1546
1524
}
1547
1525
1548
1526
nsresult EventSourceImpl::SetFieldAndClear () {
1549
- MOZ_ASSERT (!IsShutDown () );
1527
+ MOZ_ASSERT (!mIsShutDown );
1550
1528
AssertIsOnTargetThread ();
1551
1529
if (mLastFieldName .IsEmpty ()) {
1552
1530
mLastFieldValue .Truncate ();
@@ -1624,7 +1602,7 @@ nsresult EventSourceImpl::CheckHealthOfRequestCallback(
1624
1602
1625
1603
// check if we have been closed or if the request has been canceled
1626
1604
// or if we have been frozen
1627
- if (IsClosed () || IsFrozen () || !mHttpChannel ) {
1605
+ if (IsClosed () || mFrozen || !mHttpChannel ) {
1628
1606
return NS_ERROR_ABORT;
1629
1607
}
1630
1608
@@ -1836,7 +1814,7 @@ bool EventSourceImpl::CreateWorkerRef(WorkerPrivate* aWorkerPrivate) {
1836
1814
MOZ_ASSERT (aWorkerPrivate);
1837
1815
aWorkerPrivate->AssertIsOnWorkerThread ();
1838
1816
1839
- if (IsShutDown () ) {
1817
+ if (mIsShutDown ) {
1840
1818
return false ;
1841
1819
}
1842
1820
@@ -1875,7 +1853,7 @@ EventSourceImpl::Dispatch(already_AddRefed<nsIRunnable> aEvent,
1875
1853
return NS_DispatchToMainThread(event_ref.forget ());
1876
1854
}
1877
1855
1878
- if (IsShutDown () ) {
1856
+ if (mIsShutDown ) {
1879
1857
// We want to avoid clutter about errors in our shutdown logs,
1880
1858
// so just report NS_OK (we have no explicit return value
1881
1859
// for shutdown).
@@ -1916,7 +1894,7 @@ EventSource::EventSource(nsIGlobalObject* aGlobal,
1916
1894
bool aWithCredentials)
1917
1895
: DOMEventTargetHelper(aGlobal),
1918
1896
mWithCredentials(aWithCredentials),
1919
- mIsMainThread(true ) {
1897
+ mIsMainThread(NS_IsMainThread() ) {
1920
1898
MOZ_ASSERT (aGlobal);
1921
1899
MOZ_ASSERT (aCookieJarSettings);
1922
1900
mESImpl = new EventSourceImpl (this , aCookieJarSettings);
0 commit comments