Fix a threaded LLVM bug due the need for operator= on reference counted AttrListImpl...
authorOwen Anderson <resistor@mac.com>
Thu, 16 Sep 2010 00:27:35 +0000 (00:27 +0000)
committerOwen Anderson <resistor@mac.com>
Thu, 16 Sep 2010 00:27:35 +0000 (00:27 +0000)
be possible to implement this very carefully to allow a lock-free implementation while still
avoiding illegal interleavings, but I haven't been able to figure one out.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114046 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Attributes.cpp

index a000aee2ab45ee1fd5682f2e7f040ae0b70b0d14..3422faf27303beeb22cfa114b0f744640b6f0408 100644 (file)
@@ -195,6 +195,7 @@ AttrListPtr::AttrListPtr(const AttrListPtr &P) : AttrList(P.AttrList) {
 }
 
 const AttrListPtr &AttrListPtr::operator=(const AttrListPtr &RHS) {
+  sys::SmartScopedLock<true> Lock(*ALMutex);
   if (AttrList == RHS.AttrList) return *this;
   if (AttrList) AttrList->DropRef();
   AttrList = RHS.AttrList;