Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
number of tests, all because of the codecs/_multibytecodecs issue described
here (it's not a Py3K issue, just something Py3K discovers):
http://mail.python.org/pipermail/python-dev/2006-April/064051.html

Hye-Shik Chang promised to look for a fix, so no need to fix it here. The
tests that are expected to break are:

test_codecencodings_cn
test_codecencodings_hk
test_codecencodings_jp
test_codecencodings_kr
test_codecencodings_tw
test_codecs
test_multibytecodec

This merge fixes an actual test failure (test_weakref) in this branch,
though, so I believe merging is the right thing to do anyway.
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 1dd2461..cdd84bb 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -5,44 +5,51 @@
 from test import test_support
 import _testcapi
 
-for name in dir(_testcapi):
-    if name.startswith('test_'):
-        test = getattr(_testcapi, name)
+def test_main():
+
+    for name in dir(_testcapi):
+        if name.startswith('test_'):
+            test = getattr(_testcapi, name)
+            if test_support.verbose:
+                print "internal", name
+            try:
+                test()
+            except _testcapi.error:
+                raise test_support.TestFailed, sys.exc_info()[1]
+
+    # some extra thread-state tests driven via _testcapi
+    def TestThreadState():
+        import thread
+        import time
+
         if test_support.verbose:
-            print "internal", name
-        try:
-            test()
-        except _testcapi.error:
-            raise test_support.TestFailed, sys.exc_info()[1]
+            print "auto-thread-state"
 
-# some extra thread-state tests driven via _testcapi
-def TestThreadState():
-    import thread
-    import time
+        idents = []
 
-    if test_support.verbose:
-        print "auto-thread-state"
+        def callback():
+            idents.append(thread.get_ident())
 
-    idents = []
+        _testcapi._test_thread_state(callback)
+        a = b = callback
+        time.sleep(1)
+        # Check our main thread is in the list exactly 3 times.
+        if idents.count(thread.get_ident()) != 3:
+            raise test_support.TestFailed, \
+                  "Couldn't find main thread correctly in the list"
 
-    def callback():
-        idents.append(thread.get_ident())
+    try:
+        _testcapi._test_thread_state
+        have_thread_state = True
+    except AttributeError:
+        have_thread_state = False
 
-    _testcapi._test_thread_state(callback)
-    time.sleep(1)
-    # Check our main thread is in the list exactly 3 times.
-    if idents.count(thread.get_ident()) != 3:
-        raise test_support.TestFailed, \
-              "Couldn't find main thread correctly in the list"
+    if have_thread_state:
+        TestThreadState()
+        import threading
+        t=threading.Thread(target=TestThreadState)
+        t.start()
+        t.join()
 
-try:
-    _testcapi._test_thread_state
-    have_thread_state = True
-except AttributeError:
-    have_thread_state = False
-
-if have_thread_state:
-    TestThreadState()
-    import threading
-    t=threading.Thread(target=TestThreadState)
-    t.start()
+if __name__ == "__main__":
+    test_main()