From 2067d8af88cdeb14ecee0deaaeb873e3bc1eb513 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 12 Apr 2015 11:27:31 +0200 Subject: Added close event to free cache buffers. --- src/cachemanager.h | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'src/cachemanager.h') diff --git a/src/cachemanager.h b/src/cachemanager.h index 557ba23..21579d9 100644 --- a/src/cachemanager.h +++ b/src/cachemanager.h @@ -131,46 +131,54 @@ public: void thread_main(); private: - - void pushEvent(); - typedef struct { AudioFile *file; - int channel; - size_t pos; + size_t channel; + size_t pos; //< File possition sample_t *front; sample_t *back; - size_t localpos; + size_t localpos; //< Intra buffer (front) position. } cache_t; - enum cmd_t { + typedef enum { LOADNEXT = 0, -// CLEAN = 1 - }; + CLOSE = 1 + } cmd_t; typedef struct { cmd_t cmd; + + // For close event: + cacheid_t id; + + // For load next event: size_t pos; sample_t *buffer; AudioFile *file; + size_t channel; } cevent_t; - cevent_t createLoadNextEvent(AudioFile *file, size_t pos, sample_t* buffer); - void loadNext(cevent_t &e); + cevent_t createLoadNextEvent(AudioFile *file, size_t channel, size_t pos, + sample_t* buffer); + cevent_t createCloseEvent(cacheid_t id); + + void handleLoadNextEvent(cevent_t &e); + void handleCloseEvent(cevent_t &e); + void pushEvent(cevent_t e); - // Protected by mutex + std::vector id2cache; + + // Protected by mutex: std::list eventqueue; std::list availableids; - std::vector id2cache; Mutex m_events; Mutex m_ids; - Mutex m_caches; Semaphore sem; - int running; + bool running; }; #endif/*__DRUMGIZMO_CACHEMANAGER_H__*/ -- cgit v1.2.3