[Mono-list] Hang on JIT-ing fn with P/Invoke?
Jonathan Chambers
joncham at gmail.com
Thu Aug 9 10:40:16 EDT 2007
I haven't tried any of the code, but looking over it here are a few
thoughts. It appears the definition of sdp_list_t may be wrong. See
http://sofia-sip.sourceforge.net/refdocs/sdp/sdp_8h-source.html . It seems
to be missing the size field:
typedef struct sdp_list_s
<http://sofia-sip.sourceforge.net/refdocs/sdp/structsdp__list__s.html>
sdp_list_t
<http://sofia-sip.sourceforge.net/refdocs/sdp/sdp_8h.html#aa3655f9abeaabb73ad45870f4b1eb22>;
struct sdp_list_s
<http://sofia-sip.sourceforge.net/refdocs/sdp/structsdp__list__s.html>{
int l_size
<http://sofia-sip.sourceforge.net/refdocs/sdp/structsdp__list__s.html#06b47c31d917b16aca9942546c8646f2>;
sdp_list_t <http://sofia-sip.sourceforge.net/refdocs/sdp/sdp_8h.html#aa3655f9abeaabb73ad45870f4b1eb22>
*l_next <http://sofia-sip.sourceforge.net/refdocs/sdp/structsdp__list__s.html#cc02455e32c7a0132ae9c1e0a9637197>;
sdp_text_t <http://sofia-sip.sourceforge.net/refdocs/sdp/sdp_8h.html#7d0c0b74d2456ed03bc985c3ccfb128b>
*l_text <http://sofia-sip.sourceforge.net/refdocs/sdp/structsdp__list__s.html#f3bcab33331891add95041c41ef01d80>;
};
Also, I am not sure how things will work out having a class as the return
type of a pinvoke (sdp_list_append). It may marshal correctly, but then I
*think* mono will try to free the memory of the unmanaged class. It might be
better to return an IntPtr and marshal it yourself.
Good luck.
- Jonathan
On 8/9/07, Andy Hume <andyhume32 at yahoo.co.uk> wrote:
>
> Can someone try reproducing this for me. When I run the following program
> it hangs _before_ entering the function doing a certain P/Invoke call. If I
> comment out the sdp_list_append call it runs to completion. It doesn't
> occur when run on the Windows mono.exe, but does in the Mono Suse vmx. It
> needs BlueZ's libbluetooth.
>
> My best guess is that the jitter is getting stuck? There may well be
> something wrong with the P/Invoke definitions :-,), but I'm reporting the
> hang.
>
>
> using System;
> using System.Runtime.InteropServices;
>
> class Foo2
> {
> static void Main()
> {
> Console.WriteLine("entering Main");
> fn1();
> }
> static void fn1()
> {
> Console.WriteLine("entering fn1");
> fn2();
> }
> static void fn2()
> {
> Console.WriteLine("entering fn2");
> fn3();
> }
>
> static void fn3()
> {
> Console.WriteLine("entering fn3");
> uuid_t svc_uuid = new uuid_t();
> NativeMethods.sdp_uuid16_create(svc_uuid, 0x0100);
> // With this call in place, the programs hangs apparently
> // before entering this function. 'kill -QUIT' shows
> // Main->fn1->fn2->fn2<0xffffffff>
> // Comment it out and the program runs to completion
> // (likely producing a memory error when it does so).
> /**/
> sdp_list_t search_list
> = NativeMethods.sdp_list_append(null, svc_uuid);
> //*/
> }
>
> [StructLayout(LayoutKind.Sequential)]
> class uuid_t
> {
> public byte type;
> public Guid uuid128; //?
> }
>
> [StructLayout(LayoutKind.Sequential)]
> class sdp_list_t
> {
> public sdp_list_t next;
> public IntPtr data;
> }
>
> class NativeMethods
> {
> const string BluetoothLibrary = "libbluetooth";
>
> //sdp_list_t* sdp_list_append(sdp_list_t* list, void* d);
> [DllImport(BluetoothLibrary)]
> internal static extern sdp_list_t sdp_list_append(sdp_list_t list,
> uuid_t d);
>
> //uuid_t* sdp_uuid16_create(uuid_t* uuid, uint16_t data);
> [DllImport(BluetoothLibrary)]
> internal static extern uuid_t sdp_uuid16_create(uuid_t uuid, Int16
> data);
>
> }
>
> }//class
>
>
> The stack trace at hang is the following; note no fn3.
>
> mono at mono:~/Desktop/andy> mono --debug foo2.exe
> entering fnMain
> entering fn1
> entering fn2
> Full thread dump:
>
> "" tid=0x0xb7d74ae0 this=0x0x21e10:
> at Foo2.fn2 () <0xffffffff>
> at Foo2.fn2 () <0x00013>
> at Foo2.fn1 () <0x00012>
> at Foo2.Main () <0x00012>
> at (wrapper runtime-invoke) System.Object.runtime_invoke_void(object,intptr,intptr,intptr) <0xffffffff>
>
> _______________________________________________
> Mono-list maillist - Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-list/attachments/20070809/55d90ae9/attachment.html
More information about the Mono-list
mailing list