ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
I'm pretty sure that using threading Lock acquire-release around all writes will solve this, I'll update this once I have it working (this occurred to me as I was writing the question, but this should be useful for others that make the same mistake).
2 | No.2 Revision |
I'm pretty sure that using threading Lock acquire-release around all bag writes will solve this, I'll update this once I have it working (this occurred to me as I was writing the question, but this should be useful for others that make the same mistake).
3 | No.3 Revision |
I'm pretty sure that using threading Lock acquire-release around all bag writes will solve this, I'll update this once I have it working (this occurred to me as I was writing the question, but this should be useful for others that make the same mistake).
Note that the rosbag API's are not thread-safe for reading and writing any given bag file. Users of the APIs must ensure no concurrent input/output operations are performed on different threads.
http://wiki.ros.org/rosbag/Code%20API
4 | No.4 Revision |
I'm pretty sure that using threading Lock acquire-release around all bag writes will solve this, I'll update this once I have it working (this occurred to me as I was writing the question, but this should be useful for others that make the same mistake).
Note that the rosbag API's are not thread-safe for reading and writing any given bag file. Users of the APIs must ensure no concurrent input/output operations are performed on different threads.
http://wiki.ros.org/rosbag/Code%20API
This appears to be working, haven't seen a corrupt bag yet:
...
from threading import Lock
class Blah:
def __init__(self):
self.lock = Lock()
...
self.lock.acquire()
self.bag = rosbag(filename, 'w')
self.lock.release()
...
self.lock.acquire()
self.bag.close()
self.lock.release()
...
def foo_callback(self, msg):
self.lock.acquire()
self.bag.write("foo", msg)
self.lock.release()
...