operator<< was a friend class that locked the ByteVector, then invoked
hexdump on the bytevector, which used ByteVector::operator[]...which
locked the ByteVector, resulting in a deadlock.
operator<< shouldn't be a friend class anyway. Make hexdump use the
normal public access methods for ByteVector.
Signed-off-by: Zygo Blaxell <bees@furryterror.org>
Pointer m_ptr;
size_t m_size = 0;
mutable mutex m_mutex;
- friend ostream & operator<<(ostream &os, const ByteVector &bv);
};
template <class T>
THROW_CHECK2(out_of_range, size(), sizeof(T), size() >= sizeof(T));
return reinterpret_cast<T*>(data());
}
+
+ ostream& operator<<(ostream &os, const ByteVector &bv);
}
#endif // _CRUCIBLE_BYTEVECTOR_H_
ostream&
operator<<(ostream &os, const ByteVector &bv) {
- unique_lock<mutex> lock(bv.m_mutex);
hexdump(os, bv);
return os;
}