qpid-proton mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Fraser Adams <fraser.ad...@blueyonder.co.uk>
Subject Re: puzzling issue with javascript bindings
Date Mon, 02 Feb 2015 18:50:27 GMT
That's very generous of Rafael - he spotted the wood when I was still 
staring at the trees :-) I was quite impressed.

I think I can at least claim the dubious honour of being one of the very 
few people who has managed to introduce an uninitialised pointer error 
into JavaScript code! I don't know whether to be embarrassed or proud :-D

Frase


On 02/02/15 12:43, Rafael Schloming wrote:
> FYI, thanks to some help from Fraser, this issue should now be resolved.
>
> --Rafael
>
>
> On Sat, Jan 31, 2015 at 1:24 PM, Rafael Schloming <rhs@alum.mit.edu> wrote:
>
>> On Sat, Jan 31, 2015 at 12:27 PM, Fraser Adams <
>> fraser.adams@blueyonder.co.uk> wrote:
>>
>>> Hopefully you got the build I mailed you, but as an update I've upgraded
>>> my system to the latest emscripten incoming:
>>>
>>> emcc (Emscripten GCC-like replacement + linker emulating GNU ld ) 1.29.8
>>> clang version 3.5.0
>>>
>>> And did a Debug build on a clean system as before and I'm still not
>>> seeing any issues like the one you described and my recv.js seems pretty
>>> happy however many times I call send.js
>>>
>>> I'm pretty stumped!!
>>>
>>> What system are you running? Is there anything quirky? Do you have any
>>> exotic compilers or an unusual path?
>>>
>> I did get your build and it worked fine for me. I emailed you a  copy of
>> my build just in case you are curious. My versions are:
>>
>> emcc (Emscripten GCC-like replacement) 1.29.0 (commit
>> fdf24b478e1b26c0362a1627aca49ef82fd53f6a)
>> clang version 3.4
>>
>> My system is just stock fedora 20 as far as I'm aware. I installed
>> emscripten by just following the directions in the README.
>>
>> --Rafael
>>
>>
>>> Frase
>>>
>>>
>>>
>>> On 31/01/15 15:37, Rafael Schloming wrote:
>>>
>>>> Any chance you could send me a copy of your proton.js so I can try on my
>>>> system?
>>>>
>>>> --Rafael
>>>>
>>>> On Sat, Jan 31, 2015 at 10:32 AM, Fraser Adams <
>>>> fraser.adams@blueyonder.co.uk> wrote:
>>>>
>>>>   Hi again Rafi,
>>>>> As I'm on a roll today.....
>>>>>
>>>>> So I've just done:
>>>>>
>>>>> cd build
>>>>> make clean
>>>>> rm CMakeCache.txt
>>>>> cmake -DCMAKE_BUILD_TYPE=Debug ..
>>>>>
>>>>> (which gives the message: JavaScript build type is "Debug")
>>>>>
>>>>> make
>>>>>
>>>>> and when I did
>>>>>
>>>>> ./recv.js
>>>>>
>>>>> and in another window
>>>>>
>>>>> ./send.js
>>>>>
>>>>> I'm not seeing any issue:
>>>>>
>>>>> ./recv.js
>>>>>
>>>>> pipe() returning an error as we do not support them
>>>>> Address: amqp://0.0.0.0
>>>>> Subject: UK.WEATHER
>>>>> Content: "Hello World!"
>>>>> Address: amqp://0.0.0.0
>>>>> Subject: UK.WEATHER
>>>>> Content: "Hello World!"
>>>>> Address: amqp://0.0.0.0
>>>>> Subject: UK.WEATHER
>>>>> Content: "Hello World!"
>>>>> Address: amqp://0.0.0.0
>>>>> Subject: UK.WEATHER
>>>>> Content: "Hello World!"
>>>>> Address: amqp://0.0.0.0
>>>>> Subject: UK.WEATHER
>>>>> Content: "Hello World!"
>>>>> Address: amqp://0.0.0.0
>>>>> Subject: UK.WEATHER
>>>>> Content: "Hello World!"
>>>>> Address: amqp://0.0.0.0
>>>>> Subject: UK.WEATHER
>>>>> Content: "Hello World!"
>>>>> Address: amqp://0.0.0.0
>>>>> Subject: UK.WEATHER
>>>>> Content: "Hello World!"
>>>>>
>>>>> Looking in
>>>>> node_modules/qpid-proton-messenger/lib/proton-messenger.js
>>>>>
>>>>> I've definitely got the unminified/Debug version in play (which is also
>>>>> borne out by the "pipe() returning an error as we do not support them"
>>>>> message from emscripten's stub pipe call).
>>>>>
>>>>>
>>>>> So I'm not seeing what you are seeing on my system.
>>>>> I'm running Linux Mint 17.1 Rebecca
>>>>> emcc (Emscripten GCC-like replacement + linker emulating GNU ld ) 1.28.2
>>>>> clang version 3.4
>>>>> node v0.10.33
>>>>>
>>>>> I doubt the changes I've just committed would make any difference, so
>>>>> there's definitely something weird.
>>>>>
>>>>> I'll update my emscripten/fastcomp versions and see if that introduces
>>>>> this quirk.
>>>>>
>>>>> On the plus side, at least it wasn't my imagination and I really haven't
>>>>> seen this behaviour before :-D
>>>>>
>>>>> If it *is* an emscripten issue it'd be good to have a minimal reproducer
>>>>> to attach to an issue report.
>>>>>
>>>>> Frase
>>>>>
>>>>> On 31/01/15 12:17, Rafael Schloming wrote:
>>>>>
>>>>>   Hi,
>>>>>> I recently uncovered a puzzling issue with the Javascript bindings.
If
>>>>>> I
>>>>>> fire up the simple recv.js example and then run send.js, it works
fine
>>>>>> the
>>>>>> first time, but the second time around I get the error below. This
>>>>>> apparently has been happening for a while (possibly a few months),
>>>>>> however
>>>>>> I haven't noticed because it only happens with debug builds, and
only
>>>>>> then
>>>>>> the second time around. With a regular build everything seems to
work
>>>>>> fine.
>>>>>>
>>>>>> I googled around a bit for this particular error and there are a
bunch
>>>>>> of
>>>>>> threads talking about how casting function pointers doesn't work
with
>>>>>> emscripten and you need to avoid that, but I don't believe we actually
>>>>>> do
>>>>>> that ever, and I see nothing to indicate that this sort of error
would
>>>>>> go
>>>>>> away with a non Debug build.
>>>>>>
>>>>>> The stack trace (which you only get after rebuilding with ASSERTIONS=2)
>>>>>> seems pretty straightforward. It is inside pn_class_new which
>>>>>> delegates to
>>>>>> a function pointer held in the pn_class_t struct that is passed in.
I
>>>>>> believe that function pointer lookup is what is failing, but when
I put
>>>>>> printfs in the C code to confirm this, the problem goes away.
>>>>>>
>>>>>> At this point I'm kind of left scratching my head. The only thing
I can
>>>>>> think of short of a compiler bug is that somehow the pn_class_t struct
>>>>>> is
>>>>>> becoming corrupted, but I would expect valgrind to show up any sort
of
>>>>>> memory issues like that, unless somehow it is only being triggered
from
>>>>>> the
>>>>>> javascript binding.
>>>>>>
>>>>>> Anyways, I figured I should give people a heads up. The workaround
is
>>>>>> easy
>>>>>> enough, just build with non Debug build and everything seems to work
>>>>>> fine.
>>>>>> Beyond that, any insight would be greatly appreciated.
>>>>>>
>>>>>> ==============
>>>>>>
>>>>>> [rhs@localhost proton]$ examples/messenger/javascript/recv.js
>>>>>> pipe() returning an error as we do not support them
>>>>>> Address: amqp://0.0.0.0
>>>>>> Subject: UK.WEATHER
>>>>>> Content: "Hello World!"
>>>>>> Invalid function pointer '14' called with signature 'iii'. Perhaps
>>>>>> this is
>>>>>> an invalid value (e.g. caused by calling a virtual method on a NULL
>>>>>> pointer)? Or calling a function with an incorrect type, which will
>>>>>> fail?
>>>>>> (it is worth building your source files with -Werror (warnings are
>>>>>> errors),
>>>>>> as warnings can indicate undefined behavior which can cause this)
>>>>>> This pointer might make sense in another type signature: ii:
>>>>>> _pn_void_reify  iiii: 0  iiiii: 0  iiiiii: 0  vii: 0  vi: 0
>>>>>> 14
>>>>>> 14
>>>>>>
>>>>>> /home/rhs/proton/node_modules/qpid-proton/lib/proton.js:4923
>>>>>>          throw ex;
>>>>>>                ^
>>>>>> abort() at Error
>>>>>>        at jsStackTrace
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:5826:13)
>>>>>>        at stackTrace
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:5843:22)
>>>>>>        at abort
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:76848:25)
>>>>>>        at nullFunc_iii
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:11274:705)
>>>>>>        at Array.b686 [as 14]
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:73421:47)
>>>>>>        at _pn_class_new
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:11761:39)
>>>>>>        at _pn_map
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:12759:11)
>>>>>>        at _pn_hash
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:13185:11)
>>>>>>        at Array._pn_transport_initialize [as 76]
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:53534:13)
>>>>>>        at _pn_class_new
>>>>>> (/home/rhs/proton/node_modules/qpid-proton/lib/proton.js:11775:29)
>>>>>>
>>>>>>
>>>>>>


Mime
View raw message