diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2013-06-29 21:48:09 +0200 | 
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2013-06-29 21:48:09 +0200 | 
| commit | 1d552637fd68a82b454b7d5c50d3599707914d5b (patch) | |
| tree | 9268a6410f0e677302e502bb1e0a017b939c7651 /src | |
| parent | 1deb487ccc9fbb40f4abbe7695048609a6c5a99d (diff) | |
Add some more AudioFile protection (mutex/magic word)
Diffstat (limited to 'src')
| -rw-r--r-- | src/audiofile.h | 3 | ||||
| -rw-r--r-- | src/drumgizmo.cc | 7 | 
2 files changed, 8 insertions, 2 deletions
diff --git a/src/audiofile.h b/src/audiofile.h index c364b85..46c9285 100644 --- a/src/audiofile.h +++ b/src/audiofile.h @@ -95,9 +95,10 @@ public:    bool isValid();    int ref_count; +  Mutex mutex; +  private:    void *magic; -  Mutex mutex;    bool is_loaded;  }; diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index 135975d..5e14179 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -351,11 +351,14 @@ void DrumGizmo::getSamples(int ch, int pos, sample_t *s, size_t sz)          EventSample *evt = (EventSample *)event;          AudioFile *af = evt->file; -        if(!af->isLoaded() || s == NULL) { +        if(!af->isLoaded() || !af->isValid() || s == NULL) {            removeevent = true;            break;          } +        { +        MutexAutolock l(af->mutex); +          size_t n = 0;          if(evt->offset > (size_t)pos) n = evt->offset - pos;          size_t end = sz; @@ -389,6 +392,8 @@ void DrumGizmo::getSamples(int ch, int pos, sample_t *s, size_t sz)  //        LAZYLOAD:  //          loader.reset(af);          } + +        }        }        break;      }  | 
