diff -ru apr/memory/unix/apr_sms.c apr-sms/memory/unix/apr_sms.c
--- apr/memory/unix/apr_sms.c	Thu Jun 14 10:54:44 2001
+++ apr-sms/memory/unix/apr_sms.c	Thu Jun 14 14:15:46 2001
@@ -336,7 +336,8 @@
     if (!sms->reset_fn)
         return APR_ENOTIMPL;
 
-    apr_lock_acquire(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_acquire(sms->sms_lock);
     
     /* 
      * Run the cleanups of all child memory systems _including_
@@ -362,7 +363,8 @@
     /* Let the memory system handle the actual reset */
     rv = sms->reset_fn(sms);
 
-    apr_lock_release(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_release(sms->sms_lock);
     
     return rv;
 }
@@ -375,7 +377,8 @@
     struct apr_sms_cleanup *cleanup;
     struct apr_sms_cleanup *next_cleanup;
 
-    apr_lock_acquire(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_acquire(sms->sms_lock);
     
     if (apr_sms_is_tracking(sms)) {
         /* 
@@ -462,7 +465,7 @@
     pms = sms->parent;
     
     /* Remove the memory system from the parent memory systems child list */
-    if (pms)
+    if (pms && pms->sms_lock)
         apr_lock_acquire(pms->sms_lock);
         
     if (sms->sibling)
@@ -471,14 +474,15 @@
     if (sms->ref)
         *sms->ref = sms->sibling;
 
-    if (pms)
+    if (pms && pms->sms_lock)
         apr_lock_release(pms->sms_lock);
         
     /* Call the pre-destroy if present */
     if (sms->pre_destroy_fn)
         sms->pre_destroy_fn(sms);
 
-    apr_lock_destroy(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_destroy(sms->sms_lock);
     
     /* XXX - This should eventually be removed */
     apr_pool_destroy(sms->pool);
@@ -561,14 +565,16 @@
     if (!cleanup_fn)
         return APR_ENOTIMPL;
     
-    apr_lock_acquire(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_acquire(sms->sms_lock);
     
     cleanup = (struct apr_sms_cleanup *)
                   apr_sms_malloc(sms->accounting,
                                  sizeof(struct apr_sms_cleanup));
 
     if (!cleanup){
-        apr_lock_release(sms->sms_lock);
+        if (sms->sms_lock)
+            apr_lock_release(sms->sms_lock);
         return APR_ENOMEM;
     }
 
@@ -579,7 +585,8 @@
     cleanup->next = sms->cleanups;
     sms->cleanups = cleanup;
 
-    apr_lock_release(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_release(sms->sms_lock);
     
     return APR_SUCCESS;
 }
@@ -594,7 +601,8 @@
     struct apr_sms_cleanup **cleanup_ref;
     apr_status_t rv = APR_EINVAL;
     
-    apr_lock_acquire(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_acquire(sms->sms_lock);
     
     cleanup = sms->cleanups;
     cleanup_ref = &sms->cleanups;
@@ -615,7 +623,8 @@
         }
     }
 
-    apr_lock_release(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_release(sms->sms_lock);
 
     /* The cleanup function must have been registered previously */
     return rv;
@@ -628,7 +637,8 @@
     struct apr_sms_cleanup **cleanup_ref;
     apr_status_t rv = APR_EINVAL;
 
-    apr_lock_acquire(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_acquire(sms->sms_lock);
     
     cleanup = sms->cleanups;
     cleanup_ref = &sms->cleanups;
@@ -649,7 +659,8 @@
         }
     }
 
-    apr_lock_release(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_release(sms->sms_lock);
     
     /* The cleanup function must have been registered previously */
     return rv;
@@ -677,7 +688,8 @@
     struct apr_sms_cleanup **cleanup_ref;
     apr_status_t rv = APR_EINVAL;
     
-    apr_lock_acquire(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_acquire(sms->sms_lock);
     
     cleanup = sms->cleanups;
     cleanup_ref = &sms->cleanups;
@@ -700,7 +712,8 @@
         }
     }
 
-    apr_lock_release(sms->sms_lock);
+    if (sms->sms_lock)
+        apr_lock_release(sms->sms_lock);
 
     /* The cleanup function should have been registered previously */
     return rv;
