diff --git a/indra/llcorehttp/examples/http_texture_load.cpp b/indra/llcorehttp/examples/http_texture_load.cpp
index bcb322bd5c64490051139557b2db732647909566..998dc9240b19ee34eed2ff53da0d516fedb306e8 100644
--- a/indra/llcorehttp/examples/http_texture_load.cpp
+++ b/indra/llcorehttp/examples/http_texture_load.cpp
@@ -269,7 +269,10 @@ int main(int argc, char** argv)
 			  << std::endl;
 
 	// Clean up
+	hr->requestStopThread(NULL);
+	ms_sleep(1000);
 	delete hr;
+	LLCore::HttpRequest::destroyService();
 	term_curl();
 	
     return 0;
diff --git a/indra/llcorehttp/tests/test_llcorehttp_peer.py b/indra/llcorehttp/tests/test_llcorehttp_peer.py
index 58b5bedd09a43e3752ebafed5bbfa4fa886075af..489e8b29790d0fbf5bf51fc48aa8496e414d8ccc 100644
--- a/indra/llcorehttp/tests/test_llcorehttp_peer.py
+++ b/indra/llcorehttp/tests/test_llcorehttp_peer.py
@@ -33,6 +33,7 @@
 import sys
 import time
 import select
+import getopt
 from threading import Thread
 from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
 from SocketServer import ThreadingMixIn
@@ -152,6 +153,13 @@ class Server(ThreadingMixIn, HTTPServer):
     allow_reuse_address = False
 
 if __name__ == "__main__":
+    do_valgrind = False
+    path_search = False
+    options, args = getopt.getopt(sys.argv[1:], "V", ["valgrind"])
+    for option, value in options:
+        if option == "-V" or option == "--valgrind":
+            do_valgrind = True
+
     # Instantiate a Server(TestHTTPRequestHandler) on the first free port
     # in the specified port range. Doing this inline is better than in a
     # daemon thread: if it blows up here, we'll get a traceback. If it blew up
@@ -159,10 +167,14 @@ class Server(ThreadingMixIn, HTTPServer):
     # subject test program anyway.
     httpd, port = freeport(xrange(8000, 8020),
                            lambda port: Server(('127.0.0.1', port), TestHTTPRequestHandler))
+
     # Pass the selected port number to the subject test program via the
     # environment. We don't want to impose requirements on the test program's
     # command-line parsing -- and anyway, for C++ integration tests, that's
     # performed in TUT code rather than our own.
     os.environ["LL_TEST_PORT"] = str(port)
     debug("$LL_TEST_PORT = %s", port)
-    sys.exit(run(server=Thread(name="httpd", target=httpd.serve_forever), *sys.argv[1:]))
+    if do_valgrind:
+        args = ["valgrind", "--log-file=./valgrind.log"] + args
+        path_search = True
+    sys.exit(run(server=Thread(name="httpd", target=httpd.serve_forever), use_path=path_search, *args))
diff --git a/indra/llcorehttp/tests/testrunner.py b/indra/llcorehttp/tests/testrunner.py
index 5b9beb359b8ec729f6ecb8310d0a7d7da112b578..9a2de711425359cb4d0053139cde7d0dc5200981 100644
--- a/indra/llcorehttp/tests/testrunner.py
+++ b/indra/llcorehttp/tests/testrunner.py
@@ -168,7 +168,10 @@ def run(*args, **kwds):
     #   executable passed as our first arg,
     # - [no e] child should inherit this process's environment.
     debug("Running %s...", " ".join(args))
-    rc = os.spawnv(os.P_WAIT, args[0], args)
+    if kwds.get("use_path", False):
+        rc = os.spawnvp(os.P_WAIT, args[0], args)
+    else:
+        rc = os.spawnv(os.P_WAIT, args[0], args)
     debug("%s returned %s", args[0], rc)
     return rc