You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by dr...@apache.org on 2001/06/10 23:21:49 UTC
cvs commit: apr/memory/unix apr_sms_tracking.c
dreid 01/06/10 14:21:49
Modified: memory/unix apr_sms_tracking.c
Log:
Make locking conditional on having a lock to use and make the destroy
function much cleaner.
Submitted by: Sander Striker <st...@samba-tng.org>
Reviewed by: David Reid <dr...@apache.org>
Revision Changes Path
1.10 +38 -39 apr/memory/unix/apr_sms_tracking.c
Index: apr_sms_tracking.c
===================================================================
RCS file: /home/cvs/apr/memory/unix/apr_sms_tracking.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- apr_sms_tracking.c 2001/06/10 14:45:32 1.9
+++ apr_sms_tracking.c 2001/06/10 21:21:49 1.10
@@ -100,7 +100,8 @@
return NULL;
tms = (apr_sms_tracking_t *)sms;
- apr_lock_acquire(tms->lock);
+ if (tms->lock)
+ apr_lock_acquire(tms->lock);
node->next = tms->nodes;
tms->nodes = node;
@@ -108,7 +109,8 @@
if (node->next)
node->next->ref = &node->next;
- apr_lock_release(tms->lock);
+ if (tms->lock)
+ apr_lock_release(tms->lock);
node++;
@@ -127,7 +129,8 @@
return NULL;
tms = (apr_sms_tracking_t *)sms;
- apr_lock_acquire(tms->lock);
+ if (tms->lock)
+ apr_lock_acquire(tms->lock);
node->next = tms->nodes;
tms->nodes = node;
@@ -135,7 +138,8 @@
if (node->next)
node->next->ref = &node->next;
- apr_lock_release(tms->lock);
+ if (tms->lock)
+ apr_lock_release(tms->lock);
node++;
@@ -149,19 +153,20 @@
apr_track_node_t *node;
tms = (apr_sms_tracking_t *)sms;
-
-
node = (apr_track_node_t *)mem;
if (node) {
node--;
- apr_lock_acquire(tms->lock);
+
+ if (tms->lock)
+ apr_lock_acquire(tms->lock);
*(node->ref) = node->next;
if (node->next)
node->next->ref = node->ref;
-
- apr_lock_release(tms->lock);
+
+ if (tms->lock)
+ apr_lock_release(tms->lock);
}
node = apr_sms_realloc(sms->parent,
@@ -169,7 +174,8 @@
if (!node)
return NULL;
- apr_lock_acquire(tms->lock);
+ if (tms->lock)
+ apr_lock_acquire(tms->lock);
node->next = tms->nodes;
tms->nodes = node;
@@ -177,7 +183,8 @@
if (node->next)
node->next->ref = &node->next;
- apr_lock_release(tms->lock);
+ if (tms->lock)
+ apr_lock_release(tms->lock);
node++;
@@ -195,13 +202,15 @@
tms = (apr_sms_tracking_t *)sms;
- apr_lock_acquire(tms->lock);
+ if (tms->lock)
+ apr_lock_acquire(tms->lock);
*(node->ref) = node->next;
if (node->next)
node->next->ref = node->ref;
- apr_lock_release(tms->lock);
+ if (tms->lock)
+ apr_lock_release(tms->lock);
return apr_sms_free(sms->parent, node);
}
@@ -214,7 +223,8 @@
tms = (apr_sms_tracking_t *)sms;
- apr_lock_acquire(tms->lock);
+ if (tms->lock)
+ apr_lock_acquire(tms->lock);
while (tms->nodes) {
node = tms->nodes;
@@ -223,12 +233,15 @@
node->next->ref = node->ref;
if ((rv = apr_sms_free(sms->parent,
node)) != APR_SUCCESS) {
- apr_lock_release(tms->lock);
+ if (tms->lock) {
+ apr_lock_release(tms->lock);
+ }
return rv;
}
}
- apr_lock_release(tms->lock);
+ if (tms->lock)
+ apr_lock_release(tms->lock);
return APR_SUCCESS;
}
@@ -244,9 +257,12 @@
apr_sms_tracking_t *tms;
tms = (apr_sms_tracking_t *)sms;
- apr_lock_acquire(tms->lock);
- apr_lock_destroy(tms->lock);
- tms->lock = NULL;
+
+ if (tms->lock) {
+ apr_lock_acquire(tms->lock);
+ apr_lock_destroy(tms->lock);
+ tms->lock = NULL;
+ }
return APR_SUCCESS;
}
@@ -254,26 +270,9 @@
static apr_status_t apr_sms_tracking_destroy(apr_sms_t *sms)
{
apr_status_t rv;
- apr_sms_tracking_t *tms;
- apr_track_node_t *node;
-
- tms = (apr_sms_tracking_t *)sms;
-
- /* XXX - As we've already had the lock we've been using destroyed
- * in the pre_destroy function we can't use it. However, if we
- * have threads trying to use the sms while another is trying to
- * destroy it, then we have serious problems anyway.
- */
- while (tms->nodes) {
- node = tms->nodes;
- *(node->ref) = node->next;
- if (node->next)
- node->next->ref = node->ref;
- if ((rv = apr_sms_free(sms->parent, node)) != APR_SUCCESS)
- return rv;
- }
-
- return apr_sms_free(sms->parent, sms);
+
+ if ((rv = apr_sms_reset(sms)) != APR_SUCCESS)
+ return rv;
}