Skip site navigation (1)Skip section navigation (2)
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>