Thursday, February 27, 2025

Re: set_thread_name(gr_thread_t, string) not implemented on win32

Hey Chris,
as said, very happy about you reporting this! Just to be sure: with the version of GNU
Radio that you're testing being the same as installed, things work, right? (i.e., running
the tests after `make install` or equivalent)

On 2/26/25 3:55 PM, Chris Gorman wrote:
> Hello again,
>
> Upon further investigation, I found that the only reason for the tests
> running properly was that I had an installed copy of gnuradio, which
> was providing the necessary dlls for the test run to succeed. When I
> removed the installed gnuradio, all the testcases failed. :( It turns
> out there were two problems. The first was that none of the gnuradio
> dlls were in the path when the test case was run. The path in windows
> provides the equivalent function of the LD_LIBRARY_PATH in linux, so
> without the dlls in the path none of the programs built could load.
> The second problem was that python will not load dlls from a path
> other than the system python directory without a call to
> os.add_dll_directory, passing it the directory containing the
> gr_python .pyd library (the windows equivalent of the gr_python*.so
> file). I was able to hack together a find call to find all the test
> cases and a sed regex to add the call to os.add_dll_directory to the
> test cases. Now they run properly even without an installed copy of
> gnuradio. :)
>
> Thanks again to Marcus for his time on this.
>
> Best regards,
>
> Chris
>
> On Tue, Feb 25, 2025 at 1:14 PM Chris Gorman <chrisjohgorman@gmail.com> wrote:
>>
>> Hi Marcus,
>>
>> Thanks for your time.
>>
>> The output is as follows ...
>>
>> $ ctest.exe -R mute --output-on-failure
>> Test project C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/build-MINGW64
>> Start 72: qa_mute
>> 1/1 Test #72: qa_mute .......................... Passed 0.50 sec
>>
>> 100% tests passed, 0 tests failed out of 1
>>
>> Total Test time (real) = 0.64 sec
>>
>> $ ctest.exe -R interleaver --output-on-failure
>> Test project C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/build-MINGW64
>> Start 40: qa_blockinterleaver_xx
>> 1/4 Test #40: qa_blockinterleaver_xx ........... Passed 0.80 sec
>> Start 62: qa_matrix_interleaver
>> 2/4 Test #62: qa_matrix_interleaver ............ Passed 0.43 sec
>> Start 77: qa_patterned_interleaver
>> 3/4 Test #77: qa_patterned_interleaver ......... Passed 0.41 sec
>> Start 241: qa_interleaver
>> 4/4 Test #241: qa_interleaver ................... Passed 0.36 sec
>>
>> 100% tests passed, 0 tests failed out of 4
>>
>> Total Test time (real) = 2.18 sec
>>
>> $ ctest.exe -R wavfile --output-on-failure
>> Test project C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/build-MINGW64
>> Start 112: qa_wavfile
>> 1/1 Test #112: qa_wavfile ....................... Passed 0.82 sec
>>
>> 100% tests passed, 0 tests failed out of 1
>>
>> Total Test time (real) = 0.97 sec
>>
>> I can run all the tests by hand with ctest --output-on-failure and
>> they all pass. When I run them from the package build script, using
>> the same command, I get the following errors.
>>
>> 72/268 Test #72: qa_mute
>> ......................................***Timeout 90.03 sec
>> .thread_body_wrapper :error: ERROR thread[thread-per-block[1]: <block
>> mute(7)>]: pmt_to_bool: wrong_type (() . #t)
>>
>> <---snip--->
>>
>> 112/268 Test #112: qa_wavfile
>> ...................................***Failed 0.88 sec
>> ...wavfile_sink :error: sf_open(1) failed: no_file.wav: Error : major
>> format is 0.
>> .Fss...
>> ======================================================================
>> FAIL: test_004_automatic_reopen_after_stop
>> (__main__.test_wavefile.test_004_automatic_reopen_after_stop)
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>> File "C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/gnuradio-3.10.12.0/gr-blocks/python/blocks/qa_wavfile.py",
>> line 203, in test_004_automatic_reopen_after_stop
>> self.assertEqual(out_params, expected_params)
>> AssertionError: _wave[41 chars]te=8000, nframes=4, comptype='NONE',
>> compname='not compressed') != _wave[41 chars]te=8000, nframes=8,
>> comptype='NONE', compname='not compressed')
>>
>> ----------------------------------------------------------------------
>> Ran 10 tests in 0.414s
>>
>> FAILED (failures=1, skipped=2)
>>
>> <---snip--->
>>
>> 241/268 Test #241: qa_interleaver
>> ...............................***Failed 0.41 sec
>> EEE
>> ======================================================================
>> ERROR: test_001_explicit_interleaver_vector_with_length
>> (__main__.test_interleaver.test_001_explicit_interleaver_vector_with_length)
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>> File "C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/gnuradio-3.10.12.0/gr-trellis/python/trellis/qa_interleaver.py",
>> line 29, in test_001_explicit_interleaver_vector_with_length
>> self.assertEqual((k, interl, de_in), (i.k(),
>> i.interleaver_indices(), i.deinterleaver_indices()))
>> ^^^
>> AttributeError: 'gnuradio.trellis.trellis_python.interleaver' object
>> has no attribute 'k'
>>
>> ======================================================================
>> ERROR: test_002_explicit_interleaver_vector
>> (__main__.test_interleaver.test_002_explicit_interleaver_vector)
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>> File "C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/gnuradio-3.10.12.0/gr-trellis/python/trellis/qa_interleaver.py",
>> line 34, in test_002_explicit_interleaver_vector
>> i = trellis.interleaver(interl)
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> TypeError: __init__(): incompatible constructor arguments. The
>> following argument types are supported:
>> 1. gnuradio.trellis.trellis_python.interleaver()
>> 2. gnuradio.trellis.trellis_python.interleaver(INTERLEAVER:
>> gnuradio.trellis.trellis_python.interleaver)
>> 3. gnuradio.trellis.trellis_python.interleaver(K: int, INTER: list[int])
>> 4. gnuradio.trellis.trellis_python.interleaver(name: str)
>> 5. gnuradio.trellis.trellis_python.interleaver(K: int, seed: int)
>>
>> Invoked with: [1, 2, 3, 4, 0]
>>
>> ======================================================================
>> ERROR: test_002_random (__main__.test_interleaver.test_002_random)
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>> File "C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/gnuradio-3.10.12.0/gr-trellis/python/trellis/qa_interleaver.py",
>> line 41, in test_002_random
>> self.assertSequenceEqual(sorted(i.interleaver_indices()), range(k))
>> ^^^^^^^^^^^^^^^^^^^^^
>> AttributeError: 'gnuradio.trellis.trellis_python.interleaver' object
>> has no attribute 'interleaver_indices'
>>
>> ----------------------------------------------------------------------
>> Ran 3 tests in 0.006s
>>
>> FAILED (errors=3)
>>
>> Not sure what is causing this, given the success running ctest by
>> hand, maybe there is something wrong with makepkg-mingw, the build
>> program, running the tests. Thanks for your suggestion Marcus, I feel
>> much more comfortable updating the package.
>>
>> Best regards,
>>
>> Chris
>>
>> On Tue, Feb 25, 2025 at 11:35 AM Marcus Müller <mmueller@gnuradio.org> wrote:
>>>
>>> ah, just noticed: the `_test` at the end of the -R argument is wrong, please just `-R
>>> wavfile` and `-R interleave`
>>>
>>> On 2/25/25 5:09 PM, Marcus Müller wrote:
>>>> Hi Chris,
>>>>
>>>> I introduced that log message, because, well, we haven't implemented the feature to set
>>>> user thread names on Windows. That's always been the case, and hasn't changed.
>>>>
>>>> Now, your three test case failures do worry me. Could you maybe attach the outputs of
>>>>
>>>> ctest -R wavfile_test --output-on-failure
>>>> ctest -R interleave_test --output-on-failure
>>>>
>>>> ?
>>>>
>>>> Thank you for reporting things like these,
>>>> Marcus
>>>>
>>>> On 2/24/25 6:53 PM, Chris Gorman wrote:
>>>>> Hello All,
>>>>>
>>>>> I'm in the process of updating the msys2 / mingw64 implementation of
>>>>> gnuradio to 3.10.12.0 and have run into a problem with threading. Two
>>>>> tests fail[1] and one times out[2] while running the test suite. When
>>>>> run on their own, all three tests return 0 and appear to run properly,
>>>>> but for a thread error. I also get this error when running
>>>>> gnuradio-companion.exe. For each test case, and grc, I get multiple
>>>>> lines of:
>>>>>
>>>>> "thread :error: function set_thread_name(gr_thread_t, string) not
>>>>> implemented on this platform"
>>>>>
>>>>> My experience with threading is minimal and I feel uneasy proceeding
>>>>> with the update, given the error. If someone with more experience
>>>>> could let me know their opinion on whether or not the thread error is
>>>>> a cause for concern, I would appreciate it.
>>>>>
>>>>> Thanks in advance,
>>>>>
>>>>> Chris
>>>>>
>>>>> [1] qa_wavfile_test.bat and qa_interleave_test.bat
>>>>> [2] qa_mute_test.bat
>>>>>
>>>>
>>>
>

No comments:

Post a Comment