Re: [AD] Exorcising END_OF_MAIN for Allegro 5 |
[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]
This seems to work, not sure if it's right though. Pete On Mon, Jul 14, 2008 at 7:33 PM, Peter Hull <peterhull90@xxxxxxxxxx> wrote: > Just one snag-ette - no ucontext on OS X! (it may be in 10.5, it isn't > in 10.4). Actually ucontext is defined but no make/swap/getcontext. > This is despite it being a BSD function. > > More thought required! > > Pete > > > On Mon, Jul 14, 2008 at 1:06 PM, Peter Wang <novalazy@xxxxxxxxxx> wrote: >> No, that should work. When thread_func resumes into main, it will be >> running on main's original stack. hijacker runs on the stack st2. >> Which leaves the stack allocated by pthread_create() wasted... >> >> Peter >> >> On 2008-07-14, Peter Hull <peterhull90@xxxxxxxxxx> wrote: >>> I'll try it. I'm not a ucontext expert either! I think you'd need to >>> copy main's stack into the new thread first (is this possible?) >>> otherwise something like the following would fail. >>> int main() >>> { >>> int myvar = 99; >>> al_init(); >>> do_something_with(my_var); // crash because it's gone..! >>> return 1; >>> } >>> >>> Pete >>> >>> On 7/14/08, Peter Wang <novalazy@xxxxxxxxxx> wrote: >>> > On 2008-07-14, Peter Hull <peterhull90@xxxxxxxxxx> wrote: >>> > > On 7/14/08, Peter Wang <novalazy@xxxxxxxxxx> wrote: >>> > > > The problem used to be that one of the Mac libraries needed to take over >>> > > > the main thread, so we had to relegate the user's code to another >>> > > > thread. I hope it has changed. >>> > > Right, the OS will only deliver events to the main thread but in >>> > > Allegro 4 there was nowhere in the user's code where we could reliably >>> > > receive and dispatch the events. Magic main is used to run the user's >>> > > main() in a second thread. A5 uses the same design at the moment. We >>> > > could get around this if we require the user to call al_wait_for_event >>> > > regularly (which I think is not the current case) or figure out some >>> > > way to return from al_init but in a different thread (longjmp, >>> > > ucontext or similar) >>> > >>> > This is an interesting idea! >>> > >>> > Can you do something with the attached code? This is the first time I've used >>> > ucontext so it's probably not 100% correct. I get this output: >>> > >>> > main entered in [b7e4e6c0] >>> > thread_func in [b7e4db90] >>> > main resumed in [b7e4db90] >>> > hijacker in [b7e4e6c0] >>> > >>> > Peter >> >> >> ------------------------------------------------------------------------- >> Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! >> Studies have shown that voting for your favorite open source project, >> along with a healthy diet, reduces your potential for chronic lameness >> and boredom. Vote Now at http://www.sourceforge.net/community/cca08 >> -- >> https://lists.sourceforge.net/lists/listinfo/alleg-developers >> >
Attachment:
hijack2.c
Description: Binary data
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |