Commit 1e98fd01 authored by Randell Jesup's avatar Randell Jesup Committed by Pier Angelo Vendrame
Browse files

Bug 2024265: Clean up locking in nsSocketTransport r=necko-reviewers,kershaw

parent 1d1b55ab
Loading
Loading
Loading
Loading
+15 −13
Original line number Diff line number Diff line
@@ -1497,9 +1497,7 @@ nsresult nsSocketTransport::InitiateSocket() {
  //
  PRNetAddr prAddr;
  memset(&prAddr, 0, sizeof(prAddr));
  {
  if (mBindAddr) {
      MutexAutoLock lock(mLock);
    NetAddrToPRNetAddr(mBindAddr.get(), &prAddr);
    status = PR_Bind(fd, &prAddr);
    if (status != PR_SUCCESS) {
@@ -1507,7 +1505,6 @@ nsresult nsSocketTransport::InitiateSocket() {
    }
    mBindAddr = nullptr;
  }
  }

  NetAddrToPRNetAddr(&mNetAddr, &prAddr);

@@ -1526,10 +1523,15 @@ nsresult nsSocketTransport::InitiateSocket() {
#endif

  if (mTLSSocketControl) {
    if (!mEchConfig.IsEmpty() &&
    nsCString echConfig;
    {
      MutexAutoLock lock(mLock);
      echConfig = mEchConfig;
    }
    if (!echConfig.IsEmpty() &&
        !(mConnectionFlags & (DONT_TRY_ECH | BE_CONSERVATIVE))) {
      SOCKET_LOG(("nsSocketTransport::InitiateSocket set echconfig."));
      rv = mTLSSocketControl->SetEchConfig(mEchConfig);
      rv = mTLSSocketControl->SetEchConfig(echConfig);
      if (NS_FAILED(rv)) {
        return rv;
      }
@@ -2647,7 +2649,6 @@ NS_IMETHODIMP
nsSocketTransport::Bind(NetAddr* aLocalAddr) {
  NS_ENSURE_ARG(aLocalAddr);

  MutexAutoLock lock(mLock);
  MOZ_ASSERT(OnSocketThread(), "not on socket thread");
  if (mAttached) {
    return NS_ERROR_FAILURE;
@@ -2739,7 +2740,7 @@ nsSocketTransport::SetQoSBits(uint8_t aQoSBits) {

NS_IMETHODIMP
nsSocketTransport::GetQoSBits(uint8_t* aQoSBits) {
  *aQoSBits = mQoSBits;
  *aQoSBits = static_cast<uint8_t>(mQoSBits);
  return NS_OK;
}

@@ -3409,6 +3410,7 @@ nsSocketTransport::GetEchConfigUsed(bool* aEchConfigUsed) {

NS_IMETHODIMP
nsSocketTransport::SetEchConfig(const nsACString& aEchConfig) {
  MutexAutoLock lock(mLock);
  mEchConfig = aEchConfig;
  return NS_OK;
}
+9 −12
Original line number Diff line number Diff line
@@ -271,8 +271,8 @@ class nsSocketTransport final : public nsASocketHandler,
  nsCOMPtr<nsICancelable> mDNSRequest;
  nsCOMPtr<nsIDNSAddrRecord> mDNSRecord;

  nsCString mEchConfig;
  bool mEchConfigUsed = false;
  nsCString mEchConfig MOZ_GUARDED_BY(mLock);
  Atomic<bool, Relaxed> mEchConfigUsed{false};
  bool mResolvedByTRR{false};
  nsIRequest::TRRMode mEffectiveTRRMode{nsIRequest::TRR_DEFAULT_MODE};
  nsITRRSkipReason::value mTRRSkipReason{nsITRRSkipReason::TRR_UNSET};
@@ -288,7 +288,7 @@ class nsSocketTransport final : public nsASocketHandler,
  Atomic<bool, Relaxed> mNetAddrIsSet{false};
  Atomic<bool, Relaxed> mSelfAddrIsSet{false};

  UniquePtr<NetAddr> mBindAddr;
  UniquePtr<NetAddr> mBindAddr;  // socket thread only; Bind() is [noscript]

  // socket methods (these can only be called on the socket thread):

@@ -333,8 +333,8 @@ class nsSocketTransport final : public nsASocketHandler,
  // to scoping.
  RefPtr<nsSocketTransportService> mSocketTransportService;

  nsCOMPtr<nsIInterfaceRequestor> mCallbacks;
  nsCOMPtr<nsITransportEventSink> mEventSink;
  nsCOMPtr<nsIInterfaceRequestor> mCallbacks MOZ_GUARDED_BY(mLock);
  nsCOMPtr<nsITransportEventSink> mEventSink MOZ_GUARDED_BY(mLock);
  nsCOMPtr<nsITLSSocketControl> mTLSSocketControl;

  UniquePtr<nsSocketInputStream> mInput;
@@ -343,15 +343,12 @@ class nsSocketTransport final : public nsASocketHandler,
  friend class nsSocketInputStream;
  friend class nsSocketOutputStream;

  // socket timeouts are protected by mLock.
  uint16_t mTimeouts[2]{0};
  uint16_t mTimeouts[2] MOZ_GUARDED_BY(mLock){0};

  // linger options to use when closing
  bool mLingerPolarity{false};
  int16_t mLingerTimeout{0};
  bool mLingerPolarity MOZ_GUARDED_BY(mLock){false};
  int16_t mLingerTimeout MOZ_GUARDED_BY(mLock){0};

  // QoS setting for socket
  uint8_t mQoSBits{0x00};
  Atomic<uint32_t, Relaxed> mQoSBits{0};

  //
  // mFD access methods: called with mLock held.