With the 1.2.4 preview, I encountered something with the MySql Connector which I narrowed down to an issue with System.Threading.Timer. I don't know what the proper way to use the Timer is, so it may be improper use on MySql's end, but nevertheless it's unexpected.

When creating and disposing a bunch of timers from various threads, very quickly a deadlock (or something near enough) occurs.

I'm attaching a test program. I expect the program to come to completion, but inevitably one of the threads gets stuck creating a timer. This is on a single-processor x86-32.

(In MySQL, this comes up in the Command Timeout.)

TIA for looking into this for whoever knows about that part of Mono.

- Josh
using System;
using System.Threading;

public class Test {
        public static void Main(string[] arg) {
                for (int i = 0; i < 10; i++)
                        new Thread(new Test(i).Runner).Start();
        }

        int tid;
        Timer timer;

        public Test(int tid) { this.tid = tid; }

        public void Runner() {
                Console.Error.WriteLine("Thread {0} Starting", tid);
        
                timer = new Timer(Callback, null, 50, 50);
                //timer.Dispose(); // MySQL disposes right away in the usual 
case

                Console.Error.WriteLine("Thread {0} Finished", tid);
        }

        void Callback(object state) {
                Console.Error.WriteLine("Callback on Thread: {0}", tid);
                timer.Dispose();
        }
}
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to