#endif
static GHashTable *volname_hash = NULL;
+static GMutex *volname_mutex = NULL;
static void
free_volname_key(gpointer data)
drive = get_dvd_device_name(gd);
if (g_drive_has_media (gd))
{
- if (volname_hash != NULL)
- label = g_strdup(g_hash_table_lookup(volname_hash, drive));
+ g_mutex_lock(volname_mutex);
+ label = g_strdup(g_hash_table_lookup(volname_hash, drive));
+ g_mutex_unlock(volname_mutex);
if (label != NULL)
{
if (uppers_and_unders(label))
return result;
}
+void
+ghb_volname_cache_init(void)
+{
+ volname_mutex = g_mutex_new();
+ volname_hash = g_hash_table_new_full(g_str_hash, g_str_equal,
+ free_volname_key, free_volname_value);
+}
+
gpointer
ghb_cache_volnames(signal_user_data_t *ud)
{
if (drives == NULL)
return NULL;
- if (volname_hash == NULL)
- {
- volname_hash = g_hash_table_new_full(g_str_hash, g_str_equal,
- free_volname_key, free_volname_value);
- }
+ g_mutex_lock(volname_mutex);
+ g_hash_table_remove_all(volname_hash);
while (link != NULL)
{
gchar *drive = get_dvd_device_name(link->data);
g_object_unref(link->data);
link = link->next;
}
+ g_mutex_unlock(volname_mutex);
g_list_free(drives);
g_timeout_add (500, ghb_timer_cb, (gpointer)ud);
// Add dvd devices to File menu
+ ghb_volname_cache_init();
g_thread_create((GThreadFunc)ghb_cache_volnames, ud, FALSE, NULL);
GtkStatusIcon *si;