Audacious  $Id:Doxyfile42802007-03-2104:39:00Znenolod$
vfs_async.c
Go to the documentation of this file.
1 /*
2  * vfs_async.c
3  * Copyright 2010 William Pitcock
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions, and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions, and the following disclaimer in the documentation
13  * provided with the distribution.
14  *
15  * This software is provided "as is" and without any warranty, express or
16  * implied. In no event shall the authors be liable for any damages arising from
17  * the use of this software.
18  */
19 
20 #include <glib.h>
21 #include <pthread.h>
22 
23 #include "config.h"
24 #include "vfs_async.h"
25 
26 typedef struct {
27  char * filename; /* pooled */
28  void *buf;
29  int64_t size;
30  pthread_t thread;
31  void * userdata;
32 
35 
36 bool_t
38 {
39  VFSAsyncTrampoline *tr = data;
40 
41  pthread_join (tr->thread, NULL);
42 
43  tr->cons_f(tr->buf, tr->size, tr->userdata);
44 
45  str_unref (tr->filename);
46  g_slice_free(VFSAsyncTrampoline, tr);
47 
48  return FALSE;
49 }
50 
51 void *
53 {
54  VFSAsyncTrampoline *tr = data;
55 
56  vfs_file_get_contents(tr->filename, &tr->buf, &tr->size);
57 
58  g_idle_add_full(G_PRIORITY_HIGH_IDLE, vfs_async_file_get_contents_trampoline, tr, NULL);
59 
60  return NULL;
61 }
62 
63 EXPORT void
64 vfs_async_file_get_contents(const char *filename, VFSConsumer cons_f, void * userdata)
65 {
67 
68  tr = g_slice_new0(VFSAsyncTrampoline);
69  tr->filename = str_get (filename);
70  tr->cons_f = cons_f;
71  tr->userdata = userdata;
72 
73  pthread_create (& tr->thread, NULL, vfs_async_file_get_contents_worker, tr);
74 }