Changeset 369


Ignore:
Timestamp:
May 24, 2012, 12:16:46 AM (13 years ago)
Author:
dmik
Message:

icedtea-web: Replace pthread_cancel() with old good flag variable.

This is because the whole pthreads cancellation machinery (cancellation
points, cleanup routines, etc.) is not implemented on OS/2.

Location:
trunk/icedtea-web/plugin/icedteanp
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/icedtea-web/plugin/icedteanp/IcedTeaNPPlugin.cc

    r368 r369  
    23412341  plugin_to_java_bus->subscribe(java_req_proc);
    23422342
     2343#ifdef __OS2__
     2344  queue_processor_data1.processor = plugin_req_proc;
     2345  queue_processor_data2.processor = plugin_req_proc;
     2346  queue_processor_data3.processor = plugin_req_proc;
     2347  pthread_create (&plugin_request_processor_thread1, NULL, &queue_processor, (void*) &queue_processor_data1);
     2348  pthread_create (&plugin_request_processor_thread2, NULL, &queue_processor, (void*) &queue_processor_data2);
     2349  pthread_create (&plugin_request_processor_thread3, NULL, &queue_processor, (void*) &queue_processor_data3);
     2350#else
    23432351  pthread_create (&plugin_request_processor_thread1, NULL, &queue_processor, (void*) plugin_req_proc);
    23442352  pthread_create (&plugin_request_processor_thread2, NULL, &queue_processor, (void*) plugin_req_proc);
    23452353  pthread_create (&plugin_request_processor_thread3, NULL, &queue_processor, (void*) plugin_req_proc);
     2354#endif
    23462355
    23472356  itnp_plugin_thread_id = pthread_self();
     
    25312540  initialized = false;
    25322541
     2542#ifdef __OS2__
     2543  // pthread_cancel() isn't implemented on OS?2, so use an old good flag
     2544  queue_processor_data1.stopRequested = true;
     2545  queue_processor_data2.stopRequested = true;
     2546  queue_processor_data3.stopRequested = true;
     2547  pthread_cond_broadcast(&cond_message_available);
     2548#else
    25332549  pthread_cancel(plugin_request_processor_thread1);
    25342550  pthread_cancel(plugin_request_processor_thread2);
    25352551  pthread_cancel(plugin_request_processor_thread3);
     2552#endif
    25362553
    25372554  pthread_join(plugin_request_processor_thread1, NULL);
  • trunk/icedtea-web/plugin/icedteanp/IcedTeaNPPlugin.h

    r357 r369  
    9494static pthread_t plugin_request_processor_thread3;
    9595
     96#ifdef __OS2__
     97struct QueueProcessorData
     98{
     99    PluginRequestProcessor *processor;
     100    bool stopRequested;
     101};
     102
     103static QueueProcessorData queue_processor_data1 = { NULL, false };
     104static QueueProcessorData queue_processor_data2 = { NULL, false };
     105static QueueProcessorData queue_processor_data3 = { NULL, false };
     106#endif
     107
    96108// Condition on which the queue processor waits
    97109extern pthread_cond_t cond_message_available;
  • trunk/icedtea-web/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc

    r348 r369  
    694694queue_processor(void* data)
    695695{
    696 
     696#ifdef __OS2__
     697    QueueProcessorData *queue_processor_data = (QueueProcessorData *) data;
     698    PluginRequestProcessor* processor = queue_processor_data->processor;
     699#else
    697700    PluginRequestProcessor* processor = (PluginRequestProcessor*) data;
     701#endif
    698702    std::vector<std::string*>* message_parts = NULL;
    699703    std::string command;
     
    704708    pthread_mutex_init(&wait_mutex, NULL);
    705709
     710#ifdef __OS2__
     711    queue_processor_data->stopRequested = false;
     712#else
    706713    pthread_cleanup_push(queue_cleanup, (void*) &wait_mutex);
     714#endif
    707715
    708716    while (true)
     
    786794        message_parts = NULL;
    787795
     796#ifdef __OS2__
     797        if (queue_processor_data->stopRequested)
     798            break;
     799#else
    788800        pthread_testcancel();
    789     }
    790 
     801#endif
     802    }
     803
     804#ifdef __OS2__
     805    queue_cleanup((void*) &wait_mutex);
     806#else
    791807    pthread_cleanup_pop(1);
     808#endif
    792809}
    793810
Note: See TracChangeset for help on using the changeset viewer.