in JDK 1.4.2_07 on a Linux system running kernel 2.6.x and
glibc 2.3.3+ that I referred to in my previous blog entry - I
wrote a wrapper for waitid() that tolerates the
bogus options passed by javawsbin and calls the
real waitid() with saner options. With this code,
I am finally able to run javaws without problems. Note that
this bug seems to have been fixed by Sun in JDK 1.5.0_02.
/* Quick and dirty pre-loaded DSO to make buggy javawsbin
in JDK 1.4.2_07 work on Linux with kernel 2.6.x and
glibc 2.3.4.
Compilation:
gcc -O2 -fPIC -g0 -shared -o mywait.so mywait.c
Usage (Bash):
LD_PRELOAD=/path/to/mywait.so /path/to/javaws <Launcher URL>
*/
#include <dlfcn.h>
#include <sys/wait.h>
int (*real_waitid)( idtype_t, id_t, siginfo_t *, int);
int
waitid( idtype_t idtype, id_t id, siginfo_t *infop, int options)
{
int retVal = -1;
void *handle = dlopen( "/lib/libc.so.6", RTLD_LAZY);
real_waitid = dlsym( handle, "waitid");
options = (options == 0) ? WEXITED : options;
retVal = (*real_waitid)( idtype, id, infop, options);
dlclose( handle);
return retVal;
} /* End pseudo-waitid() */
(Originally posted on Advogato.)
|
Tweet |
|
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.