Date: Tue, 26 Nov 2002 16:39:42 -0500 (EST) From: Daniel Eischen <eischen@pcnet1.pcnet.com> To: Marc Recht <marc@informatik.uni-bremen.de> Cc: Daniel Eischen <eischen@vigrid.com>, freebsd-current@FreeBSD.ORG Subject: Re: PATCH - changing libc_r to use *context() Message-ID: <Pine.GSO.4.10.10211261626160.15580-100000@pcnet1.pcnet.com> In-Reply-To: <16330000.1038336929@leeloo.intern.geht.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 26 Nov 2002, Marc Recht wrote:
> > I'd like some feedback on whether some heavy threaded apps (GNOME,
> > OpenOffice, Java, etc) have any problems with this patch before
> > asking re@ for commit permission. BTW, it also needs testing on
> > alpha.
> I tried it on i386 (athon-xp) and every app I've tried stalled/locked or
> crashed right away. Mozilla gives me:
> The program '<unknown>' received an X Window System error.
> This probably reflects a bug in the program.
> The error was 'BadValue (integer parameter out of range for operation)'.
> (Details: serial 4773 error_code 2 request_code 53 minor_code 0)
> (Note to programmers: normally, X errors are reported asynchronously;
> that is, you will receive the error a while after causing it.
> To debug your program, run it with the --sync command line
> option to change this behavior. You can then get a meaningful
> backtrace from your debugger if you break on the gdk_x_error() function.)
Damn, I think I found a problem. Perhaps it might be what's
causing your problem. Do you have I686_CPU defined in
your kernel? If so can you either try it with a kernel
without I686_CPU or with CPU_DISABLE_SSE?
The kernel doesn't align the FPU registers (context) properly.
Actually, neither does anything in userland because the
machine contexts lack align directives.
You can also try modifying the patched uthread_kern.c,
function _thread_kern_sched(). There's a section about
halfway down that looks something like this:
/*
* Return to the interrupted context. We are careful
* not to use the context saved in the thread because
* we may have been interrupted by another signal which
* would have destroyed it. This context is saved by
* the kernel on the thread's stack so it is safe from
* nested signals.
*/
ucp->uc_sigmask = _process_sigmask;
THR_SETCONTEXT(ucp);
PANIC("Resume from setcontext in _thread_kern_sched");
}
else {
do {
Change the THR_SETCONTEXT(ucp) to sigreturn(ucp).
--
Dan Eischen
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.10.10211261626160.15580-100000>
