[Mono-bugs] [Bug 684944] New: assertion failure and abort at exit if GC.SuppressFinalize is called on a Socket

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Mon Apr 4 14:21:08 EDT 2011


https://bugzilla.novell.com/show_bug.cgi?id=684944

https://bugzilla.novell.com/show_bug.cgi?id=684944#c0


           Summary: assertion failure and abort at exit if
                    GC.SuppressFinalize is called on a Socket
    Classification: Mono
           Product: Mono: Runtime
           Version: 2.10.x
          Platform: x86-64
        OS/Version: Linux
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: io-layer
        AssignedTo: lupus at novell.com
        ReportedBy: Csaba.Halasz at gmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---


Created an attachment (id=423038)
 --> (http://bugzilla.novell.com/attachment.cgi?id=423038)
test case

User-Agent:       Mozilla/5.0 (X11; Linux x86_64; rv:2.0) Gecko/20100101
Firefox/4.0

If GC.SuppressFinalize is called on a Socket, mono will run into an assertion
failure and abort during process shutdown. Seems to have no harmful effect
during operation.

The problem is that socket_close is called from handle_cleanup after WSACleanup
has already been run. The actual assertion failure and abort only happens
because the socket code is trying to call SetLastError to indicate the problem.

Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7ffff7ff0740 (LWP 27286)]
0x00007ffff7206165 in *__GI_raise (sig=<value optimized out>) at
./nptl/sysdeps/unix/sysv/linux/raise.c:64
64      ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
        in ../nptl/sysdeps/unix/sysv/linux/raise.c
Current language:  auto
The current source language is "auto; currently c".
(gdb) bt
#0  0x00007ffff7206165 in *__GI_raise (sig=<value optimized out>) at
./nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff7208f70 in *__GI_abort () at abort.c:92
#2  0x00000000005cebcf in monoeg_g_logv (log_domain=0x600a5c "",
log_level=G_LOG_LEVEL_ERROR, format=<value optimized out>,
    args=<value optimized out>) at goutput.c:134
#3  0x00000000005cec67 in monoeg_assertion_message (format=0x6 <Address 0x6 out
of bounds>) at goutput.c:154
#4  0x00000000005a44ca in SetLastError (code=<value optimized out>) at
error.c:70
#5  0x00000000005b5376 in _wapi_handle_unref (handle=<value optimized out>) at
handles.c:1180
#6  0x00000000005b5954 in handle_cleanup () at handles.c:215
#7  0x00007ffff720a5e2 in __run_exit_handlers (status=0, listp=0x7ffff752f4a8,
run_list_atexit=true) at exit.c:78
#8  0x00007ffff720a635 in *__GI_exit (status=27286) at exit.c:100
#9  0x00007ffff71f2c54 in __libc_start_main (main=<value optimized out>,
argc=<value optimized out>,
    ubp_av=<value optimized out>, init=<value optimized out>, fini=<value
optimized out>, rtld_fini=<value optimized out>,
    stack_end=0x7fffffffeb28) at libc-start.c:260
#10 0x0000000000414459 in _start ()

source code of error.c:
     63 void SetLastError(guint32 code)
     64 {
     65         int ret;
     66
     67         /* Set the thread-local error code */
     68         mono_once(&error_key_once, error_init);
     69         ret = pthread_setspecific(error_key, GUINT_TO_POINTER(code));
*    70         g_assert (ret == 0);
     71 }

source code of handles.c:
   1176                 if (close_func != NULL) {
   1177                         if (is_shared) {
   1178                                 close_func (handle,
&shared_handle_data.u);
   1179                         } else {
*  1180                                 close_func (handle, &handle_data.u);
   1181                         }
   1182                 }

Reproducible: Always

Steps to Reproduce:
Create a socket and call GC.SuppressFinalize on it (see attached test case)
Actual Results:  
* Assertion at error.c:70, condition `ret == 0' not met

Aborted


Expected Results:  
Normal exit.

Happens with mono 2.10.1 on debian 6.0 and 5.0, mono 2.6.7 on the same machines
work. Reportedly fails on centos as well.

This problem is triggered by the MySql Connector/.NET, at least versions 6.1.3
and 6.3.6.

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the mono-bugs mailing list