delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2001/04/04/09:24:26

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
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.)" <kfleisc1 AT getrag-ford DOT com>
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

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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019