You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2012/03/30 18:25:21 UTC
svn commit: r1307508 - in /qpid/branches/0.16/qpid/cpp/src/qpid/framing: ./
FieldTable.cpp
Author: kgiusti
Date: Fri Mar 30 16:25:21 2012
New Revision: 1307508
URL: http://svn.apache.org/viewvc?rev=1307508&view=rev
Log:
QPID-3920: merge fix from trunk.
Modified:
qpid/branches/0.16/qpid/cpp/src/qpid/framing/ (props changed)
qpid/branches/0.16/qpid/cpp/src/qpid/framing/FieldTable.cpp
Propchange: qpid/branches/0.16/qpid/cpp/src/qpid/framing/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Mar 30 16:25:21 2012
@@ -0,0 +1,8 @@
+/qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/framing:892761,894875
+/qpid/branches/0.6-release-windows-installer/cpp/src/qpid/framing:926803
+/qpid/branches/0.6-release-windows-installer/qpid/cpp/src/qpid/framing:926803,927233
+/qpid/branches/QPID-2519/cpp/src/qpid/framing:1072051-1079078
+/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing:805429-825319
+/qpid/branches/qpid-2935/qpid/cpp/src/qpid/framing:1061302-1072333
+/qpid/branches/qpid-3346/qpid/cpp/src/qpid/framing:1144319-1179855
+/qpid/trunk/qpid/cpp/src/qpid/framing:1306434
Modified: qpid/branches/0.16/qpid/cpp/src/qpid/framing/FieldTable.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/0.16/qpid/cpp/src/qpid/framing/FieldTable.cpp?rev=1307508&r1=1307507&r2=1307508&view=diff
==============================================================================
--- qpid/branches/0.16/qpid/cpp/src/qpid/framing/FieldTable.cpp (original)
+++ qpid/branches/0.16/qpid/cpp/src/qpid/framing/FieldTable.cpp Fri Mar 30 16:25:21 2012
@@ -54,11 +54,14 @@ FieldTable::FieldTable() :
{
}
-FieldTable::FieldTable(const FieldTable& ft) :
- cachedBytes(ft.cachedBytes),
- cachedSize(ft.cachedSize),
- newBytes(ft.newBytes)
+FieldTable::FieldTable(const FieldTable& ft)
{
+ ScopedLock<Mutex> l(ft.lock); // lock _source_ FieldTable
+
+ cachedBytes = ft.cachedBytes;
+ cachedSize = ft.cachedSize;
+ newBytes = ft.newBytes;
+
// Only copy the values if we have no raw data
// - copying the map is expensive and we can
// reconstruct it if necessary from the raw data
@@ -251,6 +254,7 @@ bool FieldTable::getDouble(const std::st
//}
void FieldTable::encode(Buffer& buffer) const {
+ ScopedLock<Mutex> l(lock);
// If we've still got the input field table
// we can just copy it directly to the output
if (cachedBytes) {
@@ -264,7 +268,6 @@ void FieldTable::encode(Buffer& buffer)
i->second->encode(buffer);
}
// Now create raw bytes in case we are used again
- ScopedLock<Mutex> l(lock);
cachedSize = buffer.getPosition() - p;
cachedBytes = boost::shared_array<uint8_t>(new uint8_t[cachedSize]);
buffer.setPosition(p);
@@ -283,6 +286,7 @@ void FieldTable::decode(Buffer& buffer){
if ((available < len) || (available < 4))
throw IllegalArgumentException(QPID_MSG("Not enough data for field table."));
}
+ ScopedLock<Mutex> l(lock);
// Throw away previous stored values
values.clear();
// Copy data into our buffer
@@ -321,6 +325,7 @@ void FieldTable::realDecode() const
void FieldTable::flushRawCache()
{
+ ScopedLock<Mutex> l(lock);
// We can only flush the cache if there are no cached bytes to decode
assert(newBytes==false);
// Avoid recreating shared array unless we actually have one.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org