42 static pthread_mutex_t
mutex = PTHREAD_MUTEX_INITIALIZER;
43 static pthread_cond_t
cond = PTHREAD_COND_INITIALIZER;
54 ScanRequest * request = g_slice_new0 (ScanRequest);
56 request->filename =
str_get (filename);
57 request->flags = flags;
58 request->decoder = decoder;
59 request->callback = callback;
61 pthread_mutex_lock (&
mutex);
63 g_queue_push_tail (&
requests, request);
64 pthread_cond_signal (&
cond);
66 pthread_mutex_unlock (&
mutex);
76 free (request->image_data);
77 free (request->image_file);
78 g_slice_free (ScanRequest, request);
83 pthread_mutex_lock (&
mutex);
87 ScanRequest * request = g_queue_pop_head (&
requests);
95 pthread_mutex_unlock (&
mutex);
97 if (! request->decoder)
100 if (request->decoder && (request->flags &
SCAN_TUPLE))
101 request->tuple =
file_read_tuple (request->filename, request->decoder);
103 if (request->decoder && (request->flags &
SCAN_IMAGE))
106 & request->image_data, & request->image_len);
108 if (! request->image_data)
112 request->callback (request);
115 pthread_mutex_lock (&
mutex);
118 pthread_mutex_unlock (&
mutex);
124 return request->filename;
129 return request->decoder;
134 Tuple * tuple = request->tuple;
135 request->tuple =
NULL;
141 * data = request->image_data;
142 * len = request->image_len;
143 request->image_data =
NULL;
144 request->image_len = 0;
149 char * image_file = request->image_file;
150 request->image_file =
NULL;
162 pthread_mutex_lock (&
mutex);
165 pthread_cond_broadcast (&
cond);
167 pthread_mutex_unlock (&
mutex);
172 ScanRequest * request;
173 while ((request = g_queue_pop_head (&
requests)))
static void scan_request_free(ScanRequest *request)
PluginHandle * file_find_decoder(const char *filename, bool_t fast)
const char * scan_request_get_filename(ScanRequest *request)
bool_t file_read_image(const char *filename, PluginHandle *decoder, void **data, int64_t *size)
void scanner_cleanup(void)
Tuple * scan_request_get_tuple(ScanRequest *request)
static void * scan_worker(void *unused)
ScanRequest * scan_request(const char *filename, int flags, PluginHandle *decoder, ScanCallback callback)
EXPORT void tuple_unref(Tuple *tuple)
void scan_request_get_image_data(ScanRequest *request, void **data, int64_t *len)
void str_unref(char *str)
static pthread_t scan_threads[SCAN_THREADS]
char * scan_request_get_image_file(ScanRequest *request)
static pthread_mutex_t mutex
void(* ScanCallback)(ScanRequest *request)
char * str_get(const char *str)
PluginHandle * scan_request_get_decoder(ScanRequest *request)
char * get_associated_image_file(const char *filename)
static pthread_cond_t cond