PyGILState_STATE PyGILState_Ensure() / PyGILState_Release()
K

On 10 September 2014 09:02, Kristján Valur Jónsson <[email protected]>
wrote:

> I suspect that the raw input hook is called without the GIL held.
> You need to add a call to
> PyGIL_Ensure / PyGIL_Release
>
> On 10 September 2014 05:02, Richard Tew <[email protected]> wrote:
>
>> Hard switching immediately switches by changing the stack contents.
>> And soft switching has the function you call return an unwind token
>> which should be propagated back through the call chain to the
>> scheduler.  If you ignore this, and throw it away, it has caused crash
>> problems in the past.  Of course, with the approach you've taken,
>> there's no way it can be returned out of that event and back through
>> the call chain.  You can try and call the versions of the api which do
>> not soft switch, these might be documented in the documentation.
>>
>> Cheers,
>> Richard.
>>
>> On 9/10/14, Robert Babiak <[email protected]> wrote:
>> > oh the actual break message
>> >
>> > Process 53817 stopped
>> >
>> > * thread #5: tid = 0x1c027f, 0x0000000100ea30a3
>> Python`PyStackless_Schedule
>> > + 51, stop reason = EXC_BAD_ACCESS (code=1, address=0xd8)
>> >
>> >     frame #0: 0x0000000100ea30a3 Python`PyStackless_Schedule + 51
>> >
>> > Python`PyStackless_Schedule + 51:
>> >
>> > -> 0x100ea30a3:  movq   0xd8(%r13), %rbx
>> >
>> >    0x100ea30aa:  movq   0x10(%rbx), %r12
>> >
>> >    0x100ea30ae:  movq   $0x0, -0x30(%rbp)
>> >
>> >    0x100ea30b6:  cmpq   $0x0, 0xd0(%r13)
>> >
>> > On Tue, Sep 9, 2014 at 9:57 PM, Robert Babiak <[email protected]>
>> wrote:
>> >
>> >> I took the Receive out and replaced it with a simple call to
>> >> PyStackless_Schedule.
>> >>
>> >> static int EventHook(void)
>> >> {
>> >>     PyStackless_Schedule(Py_None, 0);
>> >>     return 0;
>> >> }
>> >> ...
>> >>         Py_SetProgramName(argv[0]);
>> >>         Py_InitializeEx(0);
>> >>         if (!Py_IsInitialized())
>> >>         {
>> >>             std::cerr << "Python initialization failed" << std::endl;
>> >>             return;
>> >>         }
>> >>         PySys_SetArgv(argc, argv);
>> >>         PyOS_InputHook = EventHook;
>> >> ...
>> >>         // stacklessMain returns when program is shutdown.
>> >>         PyStackless_CallMethod_Main(oMainModule.ptr(), "stacklessMain",
>> >> 0);
>> >> ...
>> >>
>> >> This is the lldb stacktrace
>> >>
>> >> frame #0: 0x0000000100ea30a3 Python`PyStackless_Schedule + 51
>> >>
>> >>  frame #1: 0x0000000100155fd9 main`EventHook() + 25 at
>> >> pythonInterperter.cpp:472
>> >>
>> >>     frame #2: 0x0000000103dd5e25 readline.so`call_readline + 293
>> >>
>> >>     frame #3: 0x0000000100dfa3c3 Python`PyOS_Readline + 179
>> >>
>> >>     frame #4: 0x0000000100e92882 Python`builtin_raw_input + 434
>> >>
>> >>     frame #5: 0x0000000100e95d88 Python`PyEval_EvalFrame_value + 3832
>> >>
>> >>     frame #6: 0x0000000100e94d38 Python`PyEval_EvalFrameEx_slp + 376
>> >>
>> >>     frame #7: 0x0000000100e9744c Python`PyEval_EvalFrame_value + 9660
>> >>
>> >>     frame #8: 0x0000000100e94d38 Python`PyEval_EvalFrameEx_slp + 376
>> >>
>> >>     frame #9: 0x0000000100e9744c Python`PyEval_EvalFrame_value + 9660
>> >>
>> >>     frame #10: 0x0000000100e94d38 Python`PyEval_EvalFrameEx_slp + 376
>> >>
>> >>     frame #11: 0x0000000100e9e9e1 Python`slp_frame_dispatch_top + 49
>> >>
>> >>     frame #12: 0x0000000100ea2772 Python`slp_run_tasklet + 226
>> >>
>> >>     frame #13: 0x0000000100e9e0fc Python`slp_eval_frame + 348
>> >>
>> >>     frame #14: 0x0000000100e9e083 Python`slp_eval_frame + 227
>> >>
>> >>     frame #15: 0x0000000100e9e083 Python`slp_eval_frame + 227
>> >>
>> >> .....
>> >>
>> >>     frame #719: 0x0000000100e9e083 Python`slp_eval_frame + 227
>> >>
>> >>     frame #720: 0x0000000100e9e083 Python`slp_eval_frame + 227
>> >>
>> >>     frame #721: 0x0000000100ea3801 Python`PyStackless_CallMethod_Main +
>> >> 433
>> >>
>> >>     frame #722: 0x00000001001588e3
>> >> main`PythonThread::operator(this=0x0000000101506940)() + 1187 at
>> >> pythonInterperter.cpp:555
>> >>
>> >>     frame #723: 0x000000010015761c
>> >>
>> main`boost::detail::thread_data<PythonThread>::run(this=0x0000000101506740)
>> >> + 28 at thread.hpp:117
>> >>
>> >>     frame #724: 0x00000001010ff24a
>> libboost_thread-mt.dylib`thread_proxy
>> >> +
>> >> 186
>> >>
>> >>     frame #725: 0x00007fff863fb899
>> libsystem_pthread.dylib`_pthread_body
>> >> +
>> >> 138
>> >>
>> >>     frame #726: 0x00007fff863fb72a
>> libsystem_pthread.dylib`_pthread_start
>> >> + 137
>> >>
>> >> On Tue, Sep 9, 2014 at 9:17 PM, Richard Tew <[email protected]>
>> >> wrote:
>> >>
>> >>> If you have a crash when you call receive, then you likely have larger
>> >>> problems than when the right time to call schedule is.
>> >>>
>> >>> I don't think it's possible to divine what is going wrong, and expect
>> >>> you need to provide a reproduction case.
>> >>>
>> >>> Cheers
>> >>>
>> >>> On 9/10/14, Robert Babiak <[email protected]> wrote:
>> >>> > Dear wise stackless list, I need some of your wisdom.
>> >>> >
>> >>> > I am trying to make raw_input play nice with the stackless scheduler
>> >>> > and
>> >>> > not block with my embedded stackless.
>> >>> >
>> >>> > I set the PyOS_InputHook to get what amounts to an idle event but
>> when
>> >>> > I
>> >>> > call PyStackless_Schedule(PY_None, 0) it crashes (no stackless
>> >>> symbols...)
>> >>> >
>> >>> > Is there something I need to check to know if it is safe to call the
>> >>> > scheduler from C?
>> >>> >
>> >>> > In general when is it safe to call  PyStackless_Schedule?
>> >>> >
>> >>> > I tried to call my BeNice to block and get woken up later, but this
>> >>> > also
>> >>> > crashes when trying to receive on my BeNice channel.
>> >>> >
>> >>> > - Thanks Rob.
>> >>> > --
>> >>> > Life: Bah, I will worry about it when it is over.
>> >>> >
>> >>>
>> >>> _______________________________________________
>> >>> Stackless mailing list
>> >>> [email protected]
>> >>> http://www.stackless.com/mailman/listinfo/stackless
>> >>>
>> >>
>> >>
>> >>
>> >> --
>> >> Life: Bah, I will worry about it when it is over.
>> >>
>> >
>> >
>> >
>> > --
>> > Life: Bah, I will worry about it when it is over.
>> >
>>
>> _______________________________________________
>> Stackless mailing list
>> [email protected]
>> http://www.stackless.com/mailman/listinfo/stackless
>>
>
>
_______________________________________________
Stackless mailing list
[email protected]
http://www.stackless.com/mailman/listinfo/stackless

Reply via email to