diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2010-09-21 20:09:13 +0200 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2010-09-21 20:09:13 +0200 |
commit | 1d159f7fc0f6c8534cb8be0457138507fcb8a75c (patch) | |
tree | 6a29e1e1e0aedf0e21d4bb214b558e3609d82515 | |
parent | 6159e2ea740ce7c010c7ea20f0095e85b31417f5 (diff) |
fixed crash if streamer_reset is called after streamer_free had been called
-rw-r--r-- | plugins/vfs_curl/vfs_curl.c | 7 | ||||
-rw-r--r-- | streamer.c | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/plugins/vfs_curl/vfs_curl.c b/plugins/vfs_curl/vfs_curl.c index 6f65f4e6..3f612784 100644 --- a/plugins/vfs_curl/vfs_curl.c +++ b/plugins/vfs_curl/vfs_curl.c @@ -689,8 +689,11 @@ http_read (void *ptr, size_t size, size_t nmemb, DB_FILE *stream) { http_stream_reset (fp); fp->status = STATUS_SEEK; deadbeef->mutex_unlock (fp->mutex); - deadbeef->streamer_reset (1); - continue; + if (fp->track) { // don't touch streamer if the stream is not assosiated with a track + deadbeef->streamer_reset (1); + continue; + } + return 0; } } int skip = min (fp->remaining, fp->skipbytes); @@ -1157,6 +1157,10 @@ streamer_free (void) { void streamer_reset (int full) { // must be called when current song changes by external reasons + if (!mutex) { + fprintf (stderr, "ERROR: someone called streamer_reset after exit\n"); + return; // failsafe, in case someone calls streamer reset after deinit + } src_lock (); if (full) { streamer_lock (); |