[Mono-dev] InterOp problems with 1.2.6pre2
Prakash Punnoor
prakash at punnoor.de
Fri Nov 30 12:36:39 EST 2007
Hi
I am wondering whether this problem is not interesting anyone? In the
meanwhile I could pinpoint the troublemaker.
Basically it is a float[] field I declared in the struct Encoding context:
public struct EncodingContext
{
public EncodingParameters EncodingParameters;
public Metadata Metadata;
public Status Status;
public SystemParameters SystemParameters;
public int Verbosity;
public int Channels;
public AudioCodingMode AudioCodingMode;
public bool HasLfe;
public int SampleRate;
internal A52SampleFormat SampleFormat;
public float[] InitialSamples; // the trouble maker
private IntPtr m_Context;
}
and I have and InterOp like this:
public abstract class FrameEncoder
{
[DllImport( "aften.dll" )]
private static extern void aften_set_defaults( ref EncodingContext
context );
public static EncodingContext GetDefaultsContext()
{
EncodingContext context = new EncodingContext();
aften_set_defaults( ref context );
return context;
}
}
This causes the crash/exception in mono (see quoted mail). So it doesn't have
anything to do with generics as I suspected at first. If I change the float[]
to IntPtr mono seems to work. As I said VS2008beta2 doesn't have any
problems.
Cheers,
Prakash
On the day of Saturday 24 November 2007 Prakash Punnoor hast written:
> Hi,
>
> 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 code):
>
> 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],
> FileMode.CreateNew))
> {
> inputStream.Seek(44, SeekOrigin.Begin); //Skip WAVE header...
> encoder.Encode(inputStream, outputStream);
> }
>
> Console.WriteLine("Done");
> Console.ReadLine();
> 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 aborting...
> Stacktrace:
>
> 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]
> [0x4000015b]
>
> 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?
>
> Cheers,
--
(°= =°)
//\ 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/20071130/1aa25f09/attachment.bin
More information about the Mono-devel-list
mailing list