Have you tried this fork updated to 3.10? https://github.com/bkerler/op25
<end transmission> > On Jun 15, 2022, at 16:03, Josh Morman <jmor...@gnuradio.org> wrote: > > > I think the way to properly handle GIL from long running calls is to add > py::call_guard<py::gil_scoped_release>() to the definition of the method > binding > > .def("delete_head", &msg_queue::delete_head, D(msg_queue, delete_head)) > > I haven't tried this here, but I've used it on similar python bindings > > https://pybind11.readthedocs.io/en/stable/advanced/misc.html?highlight=call_guard#global-interpreter-lock-gil > > Josh > >> On Wed, Jun 15, 2022 at 3:28 PM ikjtel <ikj12...@yahoo.com> wrote: >> Josh >> >> Many thanks for your reply. I needed some direction - this is >> exactly what I was looking for. >> >> > msgq API probably should be deprecated, but it is in fact there in 3.10. >> >> Yeah, I remember reading a pronouncement many moons ago from M. Braun >> about nuking msgq. Always dreaded this day - OP25 is a heavy user of it. >> Ref: https://osmocom.org/projects/op25 >> >> A few quick stats: OP25 has 160 lines in 25 files (.cc and .h) matching >> 'msg_q' or 'msgq'; 7 calls to insert_tail() from 5 files (.cc and .h); >> 34 calls to insert_tail() or delete_head() from 5 files (.py). >> >> > Are you able to use delete_head_nowait instead? >> >> delete_head_nowait never used to work for me, but seems to have >> improved in gr3.10. The script pasted below should (and does >> in gr3.10) print no output but in gr3.8 you get a seg fault. >> >> A preliminary diagnosis (speaking imprecisely - it was long ago) >> suggested delete_head_nowait in gr3.8 was returning some kind of >> "fancy_pointer(nil)" rather than simply "nil" which would have >> been properly rendered back to python as "None" (and gr3.10 looks >> like it gets this right). >> >> Short term I think we could visit the approx. 10 sites in python code >> and change delete_head over to _nowait. Since the returned value can't >> be trusted (gr3.8 and below in the no-message case) we'll need to skip >> if empty_p() is true. >> >> One problem with the _nowait is what to do with all the processor >> time we suddenly have on our hands. If we sleep for some arbitrary >> period it adds latency in the app that wasn't there before. >> >> Longer term is the question of what to do about msgq in OP25. The >> idea of getting rid of all the code that relies on it is agonizing. >> It may make more sense to fork the msgq code out of gnuradio-runtime. >> We could probably find some hack that would take care of the GIL problem >> in a proper way... Comments certainly welcome. >> >> Max >> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> #!/usr/bin/env python # seg faults in gr 3.8 >> >> import sys >> >> from gnuradio import gr >> >> my_msgq = gr.msg_queue(1) >> >> p = my_msgq.delete_head_nowait() >> if p: >> sys.stderr.write('found msg\n') >> sys.stderr.flush() >> print('type is %s' % p.type()) >>