diff options
-rw-r--r-- | lib/circular_buffer.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
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; |