mirror of
https://git.freebsd.org/ports.git
synced 2025-06-21 04:30:37 -04:00
Note the feature is turned off by default because it adds experimental and unofficial patches from icedtea.classpath.org. You need to select WEB option from config menu or define WITH_WEB variable to enable the feature. Also, note that a symlink for web browser is not created automatically with same reasoning. Thus, you need to create a symlink for your browser, e.g., ln -s ${LOCALBASE}/openjdk6/jre/lib/IcedTeadPlugin.so ~/.mozilla/plugins Remove some stale comments in package message while I am here.
70 lines
2.8 KiB
Diff
70 lines
2.8 KiB
Diff
$FreeBSD$
|
|
|
|
This patch works around POSIX thread anomalies in the IcedTea6 plugin.
|
|
Somehow Linux can use mutexes and condition variables uninitialized.
|
|
|
|
--- icedtea6-1.9/plugin/icedteanp/IcedTeaNPPlugin.cc.orig 2010-08-06 07:05:21.916103000 -0400
|
|
+++ icedtea6-1.9/plugin/icedteanp/IcedTeaNPPlugin.cc 2010-09-13 12:39:38.000000000 -0400
|
|
@@ -237,6 +237,7 @@ static guint appletviewer_watch_id = -1;
|
|
int plugin_debug = getenv ("ICEDTEAPLUGIN_DEBUG") != NULL;
|
|
|
|
pthread_cond_t cond_message_available = PTHREAD_COND_INITIALIZER;
|
|
+pthread_mutex_t wait_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
|
|
// Functions prefixed by ITNP_ are instance functions. They are called
|
|
// by the browser and operate on instances of ITNPPluginData.
|
|
--- icedtea6-1.9/plugin/icedteanp/IcedTeaNPPlugin.h.orig 2010-08-06 07:05:21.942208000 -0400
|
|
+++ icedtea6-1.9/plugin/icedteanp/IcedTeaNPPlugin.h 2010-09-13 12:39:13.000000000 -0400
|
|
@@ -94,6 +94,7 @@ static pthread_t plugin_request_processo
|
|
|
|
// Condition on which the queue processor waits
|
|
extern pthread_cond_t cond_message_available;
|
|
+extern pthread_mutex_t wait_mutex;
|
|
|
|
// debug switch
|
|
extern int plugin_debug;
|
|
--- icedtea6-1.9/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc.orig 2010-08-06 07:05:21.996828000 -0400
|
|
+++ icedtea6-1.9/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc 2010-09-13 12:55:28.000000000 -0400
|
|
@@ -63,6 +63,11 @@ PluginRequestProcessor::PluginRequestPro
|
|
this->pendingRequests = new std::map<pthread_t, uintmax_t>();
|
|
|
|
internal_req_ref_counter = 0;
|
|
+ pthread_mutex_init(&message_queue_mutex, NULL);
|
|
+ pthread_mutex_init(&syn_write_mutex, NULL);
|
|
+ pthread_mutex_init(&tc_mutex, NULL);
|
|
+ pthread_mutex_init(&wait_mutex, NULL);
|
|
+ pthread_cond_init(&cond_message_available, NULL);
|
|
}
|
|
|
|
/**
|
|
@@ -77,6 +82,11 @@ PluginRequestProcessor::~PluginRequestPr
|
|
|
|
if (pendingRequests)
|
|
delete pendingRequests;
|
|
+ pthread_mutex_destroy(&message_queue_mutex);
|
|
+ pthread_mutex_destroy(&syn_write_mutex);
|
|
+ pthread_mutex_destroy(&tc_mutex);
|
|
+ pthread_mutex_destroy(&wait_mutex);
|
|
+ pthread_cond_destroy(&cond_message_available);
|
|
}
|
|
|
|
/**
|
|
@@ -709,7 +719,6 @@ queue_processor(void* data)
|
|
PluginRequestProcessor* processor = (PluginRequestProcessor*) data;
|
|
std::vector<std::string*>* message_parts = NULL;
|
|
std::string command;
|
|
- pthread_mutex_t wait_mutex = PTHREAD_MUTEX_INITIALIZER; // This is needed for API compat. and is unused
|
|
|
|
PLUGIN_DEBUG("Queue processor initialized. Queue = %p\n", message_queue);
|
|
|
|
@@ -780,7 +789,9 @@ queue_processor(void* data)
|
|
|
|
} else
|
|
{
|
|
- pthread_cond_wait(&cond_message_available, &wait_mutex);
|
|
+ pthread_mutex_lock(&wait_mutex);
|
|
+ pthread_cond_wait(&cond_message_available, &wait_mutex);
|
|
+ pthread_mutex_unlock(&wait_mutex);
|
|
pthread_testcancel();
|
|
}
|
|
|