Bite the bullet. Have to use different
binaries on 2.4 and 2.6.
This commit is contained in:
parent
b4c842f139
commit
282c88f9de
4 changed files with 21 additions and 92 deletions
|
|
@ -1,32 +1,5 @@
|
|||
#define ffork ffork_clone
|
||||
#define getfforkid getfforkid_clone
|
||||
#include "ffork-Linux-clone.c"
|
||||
#undef ffork
|
||||
#undef getfforkid
|
||||
|
||||
#define ffork ffork_pthread
|
||||
#define getfforkid getfforkid_pthread
|
||||
#ifdef __Linux26__
|
||||
#include "ffork-pthread.c"
|
||||
#undef ffork
|
||||
#undef getfforkid
|
||||
|
||||
extern int _islinuxnptl(void);
|
||||
|
||||
int
|
||||
ffork(int flags, void (*fn)(void*), void *arg)
|
||||
{
|
||||
if(_islinuxnptl())
|
||||
return ffork_pthread(flags, fn, arg);
|
||||
else
|
||||
return ffork_clone(flags, fn, arg);
|
||||
}
|
||||
|
||||
int
|
||||
getfforkid(void)
|
||||
{
|
||||
if(_islinuxnptl())
|
||||
return getfforkid_pthread();
|
||||
else
|
||||
return getfforkid_clone();
|
||||
}
|
||||
|
||||
#else
|
||||
#include "ffork-Linux-clone.c"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,60 +1,5 @@
|
|||
/*
|
||||
* On Linux 2.6 and later, we can use pthreads (in fact, we must),
|
||||
* but on earlier Linux, pthreads are incompatible with using our
|
||||
* own coroutines in libthread. In order to make binaries that work
|
||||
* on either system, we detect the pthread library in use and call
|
||||
* the appropriate functions.
|
||||
*/
|
||||
|
||||
#include <u.h>
|
||||
#include <signal.h>
|
||||
#include <pthread.h>
|
||||
#include <libc.h>
|
||||
|
||||
#define _procsleep _procsleep_signal
|
||||
#define _procwakeup _procwakeup_signal
|
||||
#include "rendez-signal.c"
|
||||
|
||||
#undef _procsleep
|
||||
#undef _procwakeup
|
||||
#define _procsleep _procsleep_pthread
|
||||
#define _procwakeup _procwakeup_pthread
|
||||
#ifdef __Linux26__
|
||||
#include "rendez-pthread.c"
|
||||
|
||||
#undef _procsleep
|
||||
#undef _procwakeup
|
||||
|
||||
int
|
||||
_islinuxnptl(void)
|
||||
{
|
||||
static char buf[100];
|
||||
static int isnptl = -1;
|
||||
|
||||
if(isnptl == -1){
|
||||
if(confstr(_CS_GNU_LIBPTHREAD_VERSION, buf, sizeof buf) > 0
|
||||
&& strncmp(buf, "NPTL", 4) == 0)
|
||||
isnptl = 1;
|
||||
else
|
||||
isnptl = 0;
|
||||
}
|
||||
return isnptl;
|
||||
}
|
||||
|
||||
void
|
||||
_procsleep(_Procrend *r)
|
||||
{
|
||||
if(_islinuxnptl())
|
||||
return _procsleep_pthread(r);
|
||||
else
|
||||
return _procsleep_signal(r);
|
||||
}
|
||||
|
||||
void
|
||||
_procwakeup(_Procrend *r)
|
||||
{
|
||||
if(_islinuxnptl())
|
||||
return _procwakeup_pthread(r);
|
||||
else
|
||||
return _procwakeup_signal(r);
|
||||
}
|
||||
|
||||
#else
|
||||
#include "rendez-signal.c"
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue