[Mono-dev] InterOp problems with 1.2.6pre2

Prakash Punnoor prakash at punnoor.de
Sat Nov 24 13:24:12 EST 2007


mono 1.2.6pre1 and pre2 on Linux x86_64 can't run some C# bindings to a C 
library (an ac3 encoder), which works perfectly with vs2008beta2 and .net2.0 
target on x86.

You can get the sources at http://sourceforge.net/projects/aften/ in svn 
(revision 659). Compile it using cmake. To build C# bindings, 
pass -DBINDINGS_CS=1 to cmake. It worked with mono with the floating point 
samples case before I switched the bindings to using generics to have other 
types of samples supported (revision 651; though there were bugs in my code 
at that time ;).

The testing code is this (remember the bindings are the troublemaker, not this 

using System;
using System.IO;
using System.Runtime.InteropServices;

using Aften;

namespace AftenTest
	class MainClass
		public static int Main(string[] args)
			Console.WriteLine("Aften AC3 Encoding Demo");
			if (args.Length != 2)
Console.WriteLine("Usage: "+Path.GetFileNameWithoutExtension(Environment.CommandLine)+" 
<input.wav> <output.ac3>");
				return -1;
			EncodingContext context = FrameEncoder.GetDefaultsContext();
			context.Channels = 2;
			context.AudioCodingMode = AudioCodingMode.Stereo;
			context.SampleRate = 48000;
			context.HasLfe = false;
			context.SystemParameters.ThreadsCount = 1;
			FrameEncoderInt16 encoder = new FrameEncoderInt16(ref context);

			using (FileStream inputStream = new FileStream(args[0], FileMode.Open))
			using (FileStream outputStream = new FileStream(args[1], 
				inputStream.Seek(44, SeekOrigin.Begin); //Skip WAVE header...
				encoder.Encode(inputStream, outputStream);

			return 0;

The error I get with mono:
mono  AftenTest.exe ~/Projects/bill.wav encoded.ac3
Aften AC3 Encoding Demo

** ERROR **: Structure field of type Single[] can't be marshalled as LPArray

  at AftenTest.MainClass.Main (string[]) <0xffffffff>
  at AftenTest.MainClass.Main (string[]) <0x000b8>
  at (wrapper runtime-invoke) AftenTest.MainClass.runtime_invoke_int_string[] 
(object,intptr,intptr,intptr) <0xffffffff>

Native stacktrace:

        mono [0x51fe5d]
        /lib/libpthread.so.0 [0x2b86da225880]
        /lib/libc.so.6(gsignal+0x35) [0x2b86da6e4fa5]
        /lib/libc.so.6(abort+0x110) [0x2b86da6e6a00]
        /usr/lib/libglib-2.0.so.0 [0x2b86d9d80dec]
        /usr/lib/libglib-2.0.so.0(g_log+0x83) [0x2b86d9d80e73]
        mono [0x48ba04]
        mono [0x48e297]
        mono [0x48f449]
        mono [0x493642]
        mono [0x4942db]
        mono [0x500646]
        mono [0x50bc76]
        mono [0x50d3da]
        mono [0x43df62]

Debug info from gdb:

Using host libthread_db library "/lib/libthread_db.so.1".
[Thread debugging using libthread_db enabled]
[New Thread 0x2b86dac1bb40 (LWP 19911)]
[New Thread 0x40224950 (LWP 19913)]
[New Thread 0x40023950 (LWP 19912)]
0x00002b86da22465b in read () from /lib/libpthread.so.0
  3 Thread 0x40023950 (LWP 19912)  0x00002b86da224f11 in nanosleep ()
   from /lib/libpthread.so.0
  2 Thread 0x40224950 (LWP 19913)  0x00002b86da221c39 in 
pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
  1 Thread 0x2b86dac1bb40 (LWP 19911)  0x00002b86da22465b in read ()
   from /lib/libpthread.so.0

Thread 3 (Thread 0x40023950 (LWP 19912)):
#0  0x00002b86da224f11 in nanosleep () from /lib/libpthread.so.0
#1  0x00000000004d283f in collection_thread (unused=<value optimized out>)
    at collection.c:34
#2  0x00002b86da21d477 in start_thread () from /lib/libpthread.so.0
#3  0x00002b86da78b3ad in clone () from /lib/libc.so.6

Thread 2 (Thread 0x40224950 (LWP 19913)):
#0  0x00002b86da221c39 in pthread_cond_wait@@GLIBC_2.3.2 ()
   from /lib/libpthread.so.0
#1  0x00000000004ce015 in timedwait_signal_poll_cond (cond=0x2aaaab6be268,
    mutex=0x2aaaab6be240, timeout=0x1, alertable=-1) at handles.c:1443
#2  0x00000000004d05eb in _wapi_handle_timedwait_signal_handle (
    handle=<value optimized out>, timeout=0x0, alertable=0) at handles.c:1523
#3  0x00000000004c06af in WaitForSingleObjectEx (handle=0x404,
    timeout=4294967295, alertable=0) at wait.c:200
#4  0x0000000000498db1 in finalizer_thread (unused=<value optimized out>)
    at gc.c:843
#5  0x0000000000480b53 in start_wrapper (data=<value optimized out>)
    at threads.c:550
#6  0x00000000004c2677 in thread_start_routine (args=0x2aaaab72a0d0)
    at threads.c:264
#7  0x00000000004db4f2 in GC_start_routine ()
#8  0x00002b86da21d477 in start_thread () from /lib/libpthread.so.0
#9  0x00002b86da78b3ad in clone () from /lib/libc.so.6

Thread 1 (Thread 0x2b86dac1bb40 (LWP 19911)):
#0  0x00002b86da22465b in read () from /lib/libpthread.so.0
#1  0x00002b86d9da63e0 in read_ints () from /usr/lib/libglib-2.0.so.0
#2  0x00002b86d9da68c7 in fork_exec_with_pipes ()
   from /usr/lib/libglib-2.0.so.0
#3  0x00002b86d9da721f in g_spawn_sync () from /usr/lib/libglib-2.0.so.0
#4  0x00002b86d9da76d8 in g_spawn_command_line_sync ()
   from /usr/lib/libglib-2.0.so.0
#5  0x000000000051feee in mono_handle_native_sigsegv (
    signal=<value optimized out>, ctx=<value optimized out>)
    at mini-exceptions.c:1061
#6  <signal handler called>
#7  0x00002b86da6e4fa5 in raise () from /lib/libc.so.6
#8  0x00002b86da6e6a00 in abort () from /lib/libc.so.6
#9  0x00002b86d9d80dec in g_logv () from /usr/lib/libglib-2.0.so.0
#10 0x00002b86d9d80e73 in g_log () from /usr/lib/libglib-2.0.so.0
#11 0x000000000048ba04 in emit_struct_conv (mb=0x8fe000, klass=0x8abe88,
    to_object=1) at marshal.c:2758
#12 0x000000000048e297 in emit_marshal_vtype (m=<value optimized out>,
    argnum=0, t=0x8abf78, spec=<value optimized out>, conv_arg=3,
    conv_arg_type=<value optimized out>, action=<value optimized out>)
    at marshal.c:6192
#13 0x000000000048f449 in emit_marshal (m=0x7fffd1180200, argnum=0,
    t=0x8abf78, spec=0x0, conv_arg=3, conv_arg_type=0x0,
    action=MARSHAL_ACTION_CONV_OUT) at marshal.c:8357
#14 0x0000000000493642 in mono_marshal_emit_native_wrapper (
    image=<value optimized out>, mb=0x8fe000, sig=0x8bc940, piinfo=0x8ae570,
    mspecs=0x8c1240, func=0x2aaaabcde7c0) at marshal.c:8584
#15 0x00000000004942db in mono_marshal_get_native_wrapper (method=0x8ae570)
    at marshal.c:8731
#16 0x0000000000500646 in mono_method_to_ir (cfg=0x8c9600, method=0x8b6c68,
    start_bblock=0x91aa00, end_bblock=0x91ab08, locals_offset=0,
    return_var=0x0, dont_inline=0x91f4e0, inline_args=0x0, inline_offset=0,
    is_virtual_call=0, shared_context=0x0) at mini.c:4817
#17 0x000000000050bc76 in mini_method_compile (method=0x8b6c68, opts=5318911,
    domain=0x2aaaaab6ce00, run_cctors=<value optimized out>,
    compile_aot=<value optimized out>, parts=0) at mini.c:10728
#18 0x000000000050d3da in mono_jit_compile_method (method=0x8) at mini.c:11141
#19 0x000000000043df62 in mono_magic_trampoline (regs=0x7fffd1180a48,
    code=0x40010418 "��", m=0x8b6c68,
    tramp=0xffffffffffffffff <Address 0xffffffffffffffff out of bounds>)
    at mini-trampolines.c:121
#20 0x000000004000015b in ?? ()
#21 0x0000000000000000 in ?? ()
#0  0x00002b86da22465b in read () from /lib/libpthread.so.0

Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.

Would a fix be possible for 1.2.6 release?

(°=                 =°)
//\ Prakash Punnoor /\\
V_/                 \_V
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20071124/546c641b/attachment.bin 

More information about the Mono-devel-list mailing list