Free dead request-buffers
This partially plugs a memory leak of event-loops.
This commit is contained in:
parent
d6106b22cb
commit
fbae5f5ffd
@ -85,6 +85,17 @@ AbstractUI<RequestObject>::AbstractUI (const string& name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename RequestObject>
|
||||||
|
AbstractUI<RequestObject>::~AbstractUI ()
|
||||||
|
{
|
||||||
|
for (RequestBufferMapIterator i = request_buffers.begin(); i != request_buffers.end(); ++i) {
|
||||||
|
if ((*i).second->dead) {
|
||||||
|
EventLoop::remove_request_buffer_from_map ((*i).second);
|
||||||
|
delete (*i).second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <typename RequestObject> void
|
template <typename RequestObject> void
|
||||||
AbstractUI<RequestObject>::register_thread (pthread_t thread_id, string thread_name, uint32_t num_requests)
|
AbstractUI<RequestObject>::register_thread (pthread_t thread_id, string thread_name, uint32_t num_requests)
|
||||||
{
|
{
|
||||||
@ -113,7 +124,7 @@ AbstractUI<RequestObject>::register_thread (pthread_t thread_id, string thread_n
|
|||||||
|
|
||||||
DEBUG_TRACE (PBD::DEBUG::AbstractUI, string_compose ("create new request buffer for %1 in %2\n", thread_name, event_loop_name()));
|
DEBUG_TRACE (PBD::DEBUG::AbstractUI, string_compose ("create new request buffer for %1 in %2\n", thread_name, event_loop_name()));
|
||||||
|
|
||||||
b = new RequestBuffer (num_requests);
|
b = new RequestBuffer (num_requests); // XXX leaks
|
||||||
/* set this thread's per_thread_request_buffer to this new
|
/* set this thread's per_thread_request_buffer to this new
|
||||||
queue/ringbuffer. remember that only this thread will
|
queue/ringbuffer. remember that only this thread will
|
||||||
get this queue when it calls per_thread_request_buffer.get()
|
get this queue when it calls per_thread_request_buffer.get()
|
||||||
@ -469,7 +480,7 @@ AbstractUI<RequestObject>::call_slot (InvalidationRecord* invalidation, const bo
|
|||||||
template<typename RequestObject> void*
|
template<typename RequestObject> void*
|
||||||
AbstractUI<RequestObject>::request_buffer_factory (uint32_t num_requests)
|
AbstractUI<RequestObject>::request_buffer_factory (uint32_t num_requests)
|
||||||
{
|
{
|
||||||
RequestBuffer* mcr = new RequestBuffer (num_requests); // leaks
|
RequestBuffer* mcr = new RequestBuffer (num_requests); // XXX leaks
|
||||||
per_thread_request_buffer.set (mcr);
|
per_thread_request_buffer.set (mcr);
|
||||||
return mcr;
|
return mcr;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ class ABSTRACT_UI_API AbstractUI : public BaseUI
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AbstractUI (const std::string& name);
|
AbstractUI (const std::string& name);
|
||||||
virtual ~AbstractUI() {}
|
virtual ~AbstractUI();
|
||||||
|
|
||||||
void register_thread (pthread_t, std::string, uint32_t num_requests);
|
void register_thread (pthread_t, std::string, uint32_t num_requests);
|
||||||
void call_slot (EventLoop::InvalidationRecord*, const boost::function<void()>&);
|
void call_slot (EventLoop::InvalidationRecord*, const boost::function<void()>&);
|
||||||
|
Loading…
Reference in New Issue
Block a user