2007-04-01 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Sun, 1 Apr 2007 19:18:08 +0000 (19:18 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sun, 1 Apr 2007 19:18:08 +0000 (19:18 -0000)
* threads.c (abort_appdomain_thread): Avoid handle leakage if we are
waiting for too many threads.

svn path=/trunk/mono/; revision=75264

mono/metadata/ChangeLog
mono/metadata/threads.c

index 366cbea34b3f31ade5a711efab1d1558aa014c0a..95134ff1b2bb721fef5d795f7f65faed7d57cf06 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-01  Zoltan Varga  <vargaz@gmail.com>
+
+       * threads.c (abort_appdomain_thread): Avoid handle leakage if we are
+       waiting for too many threads.
+
 2007-03-28  Sebastien Pouliot  <sebastien@ximian.com>
 
        * environment.c: Fix return value check on uname so we can get the 
index e012838eaab329bdac84e01541b02c25919f6baf..f4f105805523d3e450faa3f046fd50f02794274c 100644 (file)
@@ -2348,15 +2348,14 @@ abort_appdomain_thread (gpointer key, gpointer value, gpointer user_data)
        MonoDomain *domain = data->domain;
 
        if (mono_thread_has_appdomain_ref (thread, domain)) {
-               HANDLE handle = OpenThread (THREAD_ALL_ACCESS, TRUE, thread->tid);
-               if (handle == NULL)
-                       return;
-
                /* printf ("ABORTING THREAD %p BECAUSE IT REFERENCES DOMAIN %s.\n", thread->tid, domain->friendly_name); */
 
                ves_icall_System_Threading_Thread_Abort (thread, NULL);
 
                if(data->wait.num<MAXIMUM_WAIT_OBJECTS) {
+                       HANDLE handle = OpenThread (THREAD_ALL_ACCESS, TRUE, thread->tid);
+                       if (handle == NULL)
+                               return;
                        data->wait.handles [data->wait.num] = handle;
                        data->wait.threads [data->wait.num] = thread;
                        data->wait.num++;