diff -p -up icedtea6-1.8.2/plugin/icedteanp/IcedTeaNPPlugin.cc.orig icedtea6-1.8.2/plugin/icedteanp/IcedTeaNPPlugin.cc --- icedtea6-1.8.2/plugin/icedteanp/IcedTeaNPPlugin.cc.orig 2010-10-29 16:01:16.842506014 -0200 +++ icedtea6-1.8.2/plugin/icedteanp/IcedTeaNPPlugin.cc 2010-10-29 16:20:23.627505837 -0200 @@ -412,7 +412,9 @@ void start_jvm_if_needed() // This is asynchronized function. It must // have exclusivity when running. - GMutex *vm_start_mutex = g_mutex_new(); + static GMutex *vm_start_mutex; + if (vm_start_mutex == NULL) + vm_start_mutex = g_mutex_new(); g_mutex_lock(vm_start_mutex); PLUGIN_DEBUG("Checking JVM status...\n"); @@ -421,6 +423,7 @@ void start_jvm_if_needed() if (jvm_up) { PLUGIN_DEBUG("JVM is up. Returning.\n"); + g_mutex_unlock(vm_start_mutex); return; } diff -p -up icedtea6-1.8.2/plugin/icedteanp/IcedTeaPluginUtils.cc.orig icedtea6-1.8.2/plugin/icedteanp/IcedTeaPluginUtils.cc --- icedtea6-1.8.2/plugin/icedteanp/IcedTeaPluginUtils.cc.orig 2010-10-29 16:05:34.780507206 -0200 +++ icedtea6-1.8.2/plugin/icedteanp/IcedTeaPluginUtils.cc 2010-10-29 16:31:36.731506939 -0200 @@ -1029,6 +1029,7 @@ MessageBus::post(const char* message) PLUGIN_DEBUG("Trying to lock %p...\n", &msg_queue_mutex); pthread_mutex_lock(&subscriber_mutex); + pthread_mutex_lock(&msg_queue_mutex); PLUGIN_DEBUG("Message %s received on bus. Notifying subscribers.\n", msg); @@ -1038,10 +1039,14 @@ MessageBus::post(const char* message) message_consumed = ((BusSubscriber*) *i)->newMessageOnBus(msg); } + pthread_mutex_unlock(&msg_queue_mutex); pthread_mutex_unlock(&subscriber_mutex); - if (!message_consumed) + if (!message_consumed) { PLUGIN_DEBUG("Warning: No consumer found for message %s\n", msg); + /* no subscribers */ + free(msg); + } PLUGIN_DEBUG("%p unlocked...\n", &msg_queue_mutex); }