From 0a30efc54bd115f717f55cf4be0ea5cf20def198 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 19 Jun 2013 20:27:25 -0700 Subject: gras: add retries for make_circular_buffer ipc exceptions This commit addresses #104 --- lib/circular_buffer.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'lib/circular_buffer.cpp') diff --git a/lib/circular_buffer.cpp b/lib/circular_buffer.cpp index 948e3db..0dda400 100644 --- a/lib/circular_buffer.cpp +++ b/lib/circular_buffer.cpp @@ -180,7 +180,27 @@ static void circular_buffer_delete(SBuffer &buff, CircularBuffer *circ_buff) SBuffer make_circular_buffer(const size_t num_bytes) { - CircularBuffer *circ_buff = new CircularBuffer(num_bytes); + CircularBuffer *circ_buff = NULL; + size_t trial_count = 0; + while (circ_buff == NULL) + { + trial_count++; + try + { + circ_buff = new CircularBuffer(num_bytes); + } + catch(const boost::interprocess::interprocess_exception &ex) + { + std::cerr << boost::format( + "GRAS: make_circular_buffer threw ipc exception on attempt %u\n%s" + ) % trial_count % ex.what() << std::endl; + if (trial_count== 3) throw ex; + } + catch(...) + { + throw; + } + } SBufferDeleter deleter = boost::bind(&circular_buffer_delete, _1, circ_buff); SBufferConfig config; config.memory = circ_buff->buff_addr; -- cgit