]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
SF patch 522961: Leak in Python/thread_nt.h, from Gerald S. Williams.
authorTim Peters <tim.peters@gmail.com>
Thu, 28 Feb 2002 21:34:34 +0000 (21:34 +0000)
committerTim Peters <tim.peters@gmail.com>
Thu, 28 Feb 2002 21:34:34 +0000 (21:34 +0000)
A file-static "threads" dict mapped thread IDs to Windows handles, but
was never referenced, and entries never got removed.  This gets rid of
the YAGNI-dict entirely.
Bugfix candidate.

Misc/ACKS
Python/thread_nt.h

index 1646fe0741b2d6d90607a868f9f963dde9387b1f..9a49b8628f4d2c3aa6a1c0f90461712d9c2f32fe 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -474,6 +474,7 @@ Rickard Westman
 Truida Wiedijk
 Gerry Wiener
 Bryce "Zooko" Wilcox-O'Hearn
+Gerald S. Williams
 Sue Williams
 Frank Willison
 Greg V. Wilson
index 019270736ca0f097b34263dcf36fa8fe16e809c2..44814c697763b4a8d096f8cbc4d4316e700fd628 100644 (file)
@@ -1,11 +1,11 @@
 
 /* This code implemented by Dag.Gruneau@elsa.preseco.comm.se */
 /* Fast NonRecursiveMutex support by Yakov Markovitch, markovitch@iso.ru */
+/* Eliminated some memory leaks, gsw@agere.com */
 
 #include <windows.h>
 #include <limits.h>
 #include <process.h>
-#include <Python.h>
 
 typedef struct NRMUTEX {
        LONG   owned ;
@@ -13,9 +13,6 @@ typedef struct NRMUTEX {
        HANDLE hevent ;
 } NRMUTEX, *PNRMUTEX ;
 
-/* dictionary to correlate thread ids with the handle needed to terminate them*/
-static PyObject *threads = NULL;
-
 typedef PVOID WINAPI interlocked_cmp_xchg_t(PVOID *dest, PVOID exc, PVOID comperand) ;
 
 /* Sorry mate, but we haven't got InterlockedCompareExchange in Win95! */
@@ -138,17 +135,11 @@ void FreeNonRecursiveMutex(PNRMUTEX mutex)
 
 long PyThread_get_thread_ident(void);
 
-/*
- * Change all headers to pure ANSI as no one will use K&R style on an
- * NT
- */
-
 /*
  * Initialization of the C package, should not be needed.
  */
 static void PyThread__init_thread(void)
 {
-       threads = PyDict_New();
 }
 
 /*
@@ -182,7 +173,6 @@ long PyThread_start_new_thread(void (*func)(void *), void *arg)
        int success = 0;
        callobj *obj;
        int id;
-       PyObject *key, *val;
 
        dprintf(("%ld: PyThread_start_new_thread called\n", PyThread_get_thread_ident()));
        if (!initialized)
@@ -203,9 +193,6 @@ long PyThread_start_new_thread(void (*func)(void *), void *arg)
        /* wait for thread to initialize and retrieve id */
        WaitForSingleObject(obj->done, 5000);  /* maybe INFINITE instead of 5000? */
        CloseHandle((HANDLE)obj->done);
-       key = PyLong_FromLong(obj->id);
-       val = PyLong_FromLong((long)rv);
-       PyDict_SetItem(threads, key, val);
        id = obj->id;
        free(obj);
        return id;