summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-26 22:10:57 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-26 22:10:57 +0200
commitf5bdcf539e33e4dfe9aabf2849042f782bc5cdb0 (patch)
tree798efd1c507009efe32c72f2e0887c35cea4ce38
parent8d71e34f2fb4c06c7d37b2a11f4cbba8b9c58e61 (diff)
fixed thread sync in vfs_curl when using http_abort
-rw-r--r--plugins/vfs_curl/vfs_curl.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/plugins/vfs_curl/vfs_curl.c b/plugins/vfs_curl/vfs_curl.c
index eb64b17d..5929b52e 100644
--- a/plugins/vfs_curl/vfs_curl.c
+++ b/plugins/vfs_curl/vfs_curl.c
@@ -636,15 +636,16 @@ http_set_track (DB_FILE *f, DB_playItem_t *it) {
static void
http_close (DB_FILE *stream) {
- trace ("http_close\n");
+ trace ("http_close %p\n", stream);
assert (stream);
HTTP_FILE *fp = (HTTP_FILE *)stream;
+
+ deadbeef->mutex_lock (fp->mutex);
if (fp->tid) {
- deadbeef->mutex_lock (fp->mutex);
fp->status = STATUS_ABORTED;
+ trace ("http_close thread_join\n");
deadbeef->mutex_unlock (fp->mutex);
deadbeef->thread_join (fp->tid);
- deadbeef->mutex_free (fp->mutex);
}
if (fp->content_type) {
free (fp->content_type);
@@ -655,7 +656,9 @@ http_close (DB_FILE *stream) {
if (fp->url) {
free (fp->url);
}
+ deadbeef->mutex_free (fp->mutex);
free (stream);
+ trace ("http_close done\n");
}
static size_t
@@ -851,14 +854,18 @@ http_get_content_type (DB_FILE *stream) {
void
http_abort (DB_FILE *fp) {
- trace ("http_abort\n");
+ trace ("http_abort %p\n", fp);
HTTP_FILE *f = (HTTP_FILE *)fp;
if (f->tid) {
deadbeef->mutex_lock (f->mutex);
f->status = STATUS_ABORTED;
+// intptr_t tid = f->tid;
+// f->tid = 0;
deadbeef->mutex_unlock (f->mutex);
- deadbeef->thread_join (f->tid);
+// trace ("http_abort thread_join\n");
+// deadbeef->thread_join (tid);
}
+ trace ("http_abort done\n");
}
static int