diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 0cc5c04..3c3aec1 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -172,11 +172,14 @@
             filename = _os.path.join(dir, name)
             try:
                 fd = _os.open(filename, _bin_openflags, 0o600)
-                fp = _io.open(fd, 'wb')
-                fp.write(b'blat')
-                fp.close()
-                _os.unlink(filename)
-                del fp, fd
+                try:
+                    try:
+                        fp = _io.open(fd, 'wb', buffering=0, closefd=False)
+                        fp.write(b'blat')
+                    finally:
+                        _os.close(fd)
+                finally:
+                    _os.unlink(filename)
                 return dir
             except FileExistsError:
                 pass
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index b638d87..2962939 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -1,6 +1,7 @@
 # tempfile.py unit tests.
 import tempfile
 import errno
+import io
 import os
 import signal
 import sys
@@ -198,7 +199,44 @@
             # paths in this list.
 
 
-# We test _get_default_tempdir by testing gettempdir.
+# We test _get_default_tempdir some more by testing gettempdir.
+
+class TestGetDefaultTempdir(BaseTestCase):
+    """Test _get_default_tempdir()."""
+
+    def test_no_files_left_behind(self):
+        # use a private empty directory
+        with tempfile.TemporaryDirectory() as our_temp_directory:
+            # force _get_default_tempdir() to consider our empty directory
+            def our_candidate_list():
+                return [our_temp_directory]
+
+            with support.swap_attr(tempfile, "_candidate_tempdir_list",
+                                   our_candidate_list):
+                # verify our directory is empty after _get_default_tempdir()
+                tempfile._get_default_tempdir()
+                self.assertEqual(os.listdir(our_temp_directory), [])
+
+                def raise_OSError(*args, **kwargs):
+                    raise OSError()
+
+                with support.swap_attr(io, "open", raise_OSError):
+                    # test again with failing io.open()
+                    with self.assertRaises(FileNotFoundError):
+                        tempfile._get_default_tempdir()
+                    self.assertEqual(os.listdir(our_temp_directory), [])
+
+                open = io.open
+                def bad_writer(*args, **kwargs):
+                    fp = open(*args, **kwargs)
+                    fp.write = raise_OSError
+                    return fp
+
+                with support.swap_attr(io, "open", bad_writer):
+                    # test again with failing write()
+                    with self.assertRaises(FileNotFoundError):
+                        tempfile._get_default_tempdir()
+                    self.assertEqual(os.listdir(our_temp_directory), [])
 
 
 class TestGetCandidateNames(BaseTestCase):
diff --git a/Misc/ACKS b/Misc/ACKS
index 2828a8b..cddf161 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1163,6 +1163,7 @@
 Paul Swartz
 Thenault Sylvain
 Péter Szabó
+Amir Szekely
 Arfrever Frehtes Taifersar Arahesis
 Neil Tallim
 Geoff Talvola
diff --git a/Misc/NEWS b/Misc/NEWS
index f2bad73..d3f7e07 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -175,6 +175,9 @@
 Library
 -------
 
+- Issue #16800: tempfile.gettempdir() no longer left temporary files when
+  the disk is full.  Original patch by Amir Szekely.
+
 - Issue #16564: Fixed regression relative to Python2 in the operation of
   email.encoders.encode_7or8bit when used with binary data.
 
