Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com X-Server-Uuid: c41a640a-a9e9-11d4-8124-00508bd3f8dc Message-ID: <200104041238.f34Cc7X14060@dymwsm09.mailwatch.com> From: "Fleischer, Karsten (K.)" To: cygwin AT cygwin DOT com Subject: RE: port of omniorb Date: Wed, 4 Apr 2001 08:37:50 -0400 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2651.58) X-WSS-ID: 16D5CA20218809-01-01 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 7bit I had a closer look at OmniORB's posix.cc source file. There is a macro "PthreadSupportThreadPriority" which toggles use of thread priority. If undefined,following functions are never needed: > pthread_attr_setprio > pthread_attr_setschedparam > pthread_setprio > pthread_setschedattr > pthread_setschedparam Here are the functions that are always needed: X> pthread_cond_broadcast X> pthread_cond_destroy X> pthread_cond_signal X> pthread_cond_timedwait X> pthread_cond_wait X> pthread_exit O> pthread_setspecific X> pthread_mutex_lock X> pthread_mutex_unlock X> pthread_self X> pthread_mutex_destroy X> pthread_join The following are available on some OS's only. Alternatives for other OS's are given, just have to choose the right one. > pthread_get_expiration_np > pthread_delay_np These are used only if we have a pthread draft 4 implementation: > pthread_attr_create > pthread_attr_delete ??> pthread_keycreate Otherwise these are used instead: X> pthread_attr_destroy X> pthread_attr_init O> pthread_key_create The following have different calling conventions along different versions of the pthread draft: X> pthread_create (draft 4: second arg is pthread_attr_t, otherwise pthread_attr_t *) X> pthread_detach (draft <= : arg is pthread_t *, otherwise pthread_t) O> pthread_getspecific (draft <= 6: void return type, needs second arg of type void **; draft > 6: void * return type, no second arg) X> pthread_yield (if draft == 6: called with NULL arg, elif draft < 9: no arg, else: call sched_yield) These two are called with second arg = 0 for draft version != 4. With draft version 4 the second arg is pthread_mutexatrr_default/pthread_condattr_default: X> pthread_cond_init X> pthread_mutex_init This one is used only if draft version == 8: X> pthread_attr_setdetachstate This one is used only if NeedPthreadInit is defined > pthread_init This one, the only you marked as "can't be done", is used only if !defined(__linux__) C> pthread_attr_setstacksize Which pthread draft version do we have on Cygwin? At least 8, I think... Robert? Undefining the NoNanoSleep macro gets rid of pthread_delay_np. This forces use of the nanosleep function instead in omni_thread::sleep. Nothing has to be done to get rid of pthread_get_expiration_np. Use of clock_gettime in omni_thread::get_time will happen automatically. So for building OmniORB one has to - undefine PthreadSupportThreadPriority - undefine NeedPthreadInit - define PthreadDraftVersion to 8(?) - undefine NoNanoSleep in the makefile. This is done by setting OMNITHREAD_POSIX_CPPFLAGS = -UPthreadSupportThreadPriority -UNeedPthreadInit -DPthreadDraftVersion=8 -UNoNanoSleep in the platform specific makefile. The only change which is necessarily needed in posix.cc is to change line 537 from #if !defined(__linux__) to #if !defined(__linux__) && !defined(__CYGWIN__) Hope this helps... Karsten -- Want to unsubscribe from this list? Check out: http://cygwin.com/ml/#unsubscribe-simple