summaryrefslogtreecommitdiff
path: root/lib/circular_buffer.cpp
diff options
context:
space:
mode:
authorJosh Blum2012-12-18 00:28:38 -0800
committerJosh Blum2012-12-18 00:28:38 -0800
commit77a8eb46febf39d39b8b195aaffa1d4594e94812 (patch)
treea0e00821f021e6030f566ecfae0530c9b60c9f5b /lib/circular_buffer.cpp
parenta1ed270616fa0d99c4ad790d9b183a65ce5ee512 (diff)
downloadsandhi-77a8eb46febf39d39b8b195aaffa1d4594e94812.tar.gz
sandhi-77a8eb46febf39d39b8b195aaffa1d4594e94812.tar.bz2
sandhi-77a8eb46febf39d39b8b195aaffa1d4594e94812.zip
fixes for circ buffer implementation
Diffstat (limited to 'lib/circular_buffer.cpp')
-rw-r--r--lib/circular_buffer.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/circular_buffer.cpp b/lib/circular_buffer.cpp
index 179e650..1021a12 100644
--- a/lib/circular_buffer.cpp
+++ b/lib/circular_buffer.cpp
@@ -6,13 +6,15 @@
#include <boost/bind.hpp>
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
-#include <boost/uuid/uuid.hpp>
-#include <boost/uuid/uuid_io.hpp>
-#include <ctime>
+#include <boost/lexical_cast.hpp>
+#include <boost/thread/thread.hpp>
+#include <boost/thread/mutex.hpp>
using namespace gras;
namespace ipc = boost::interprocess;
+static boost::mutex alloc_mutex;
+
/*!
* This routine generates an incredibly unique name for the allocation.
*
@@ -24,9 +26,9 @@ namespace ipc = boost::interprocess;
*/
static std::string omg_so_unique(void)
{
- boost::uuids::uuid u1; // initialize uuid
- return boost::str(boost::format("shmem-%s-%u-%u-%u")
- % to_string(u1) % std::rand() % clock() % time(NULL));
+ const std::string tid = boost::lexical_cast<std::string>(boost::this_thread::get_id());
+ static size_t count = 0;
+ return boost::str(boost::format("shmem-%s-%u") % tid % count++);
}
struct CircularBuffer
@@ -48,6 +50,8 @@ struct CircularBuffer
CircularBuffer::CircularBuffer(const size_t num_bytes)
{
+ boost::mutex::scoped_lock lock(alloc_mutex);
+
const size_t chunk = ipc::mapped_region::get_page_size();
const size_t len = chunk*((num_bytes + chunk - 1)/chunk);
actual_length = len;