Commit f367c790 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Crude hack to try to get a clue to why rdlocks are unhappy on certain

platforms
parent a48962fc
......@@ -30,6 +30,7 @@
#include "config.h"
#include <errno.h>
#include <dlfcn.h>
#include <pthread.h>
#include <stdio.h>
......@@ -252,9 +253,9 @@ vcl_get(struct vcl **vcc, struct vcl *vcl)
{
CHECK_OBJ_NOTNULL(vcl, VCL_MAGIC);
AZ(pthread_rwlock_rdlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_rdlock(&vcl->temp_rwl));
assert(VCL_WARM(vcl));
AZ(pthread_rwlock_unlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_unlock(&vcl->temp_rwl));
Lck_Lock(&vcl_mtx);
AN(vcl);
if (vcl->label == NULL)
......@@ -294,9 +295,9 @@ VCL_Ref(struct vcl *vcl)
{
CHECK_OBJ_NOTNULL(vcl, VCL_MAGIC);
AZ(pthread_rwlock_rdlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_rdlock(&vcl->temp_rwl));
assert(!VCL_COLD(vcl));
AZ(pthread_rwlock_unlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_unlock(&vcl->temp_rwl));
Lck_Lock(&vcl_mtx);
assert(vcl->busy > 0);
vcl->busy++;
......@@ -332,9 +333,9 @@ VCL_AddBackend(struct vcl *vcl, struct backend *be)
CHECK_OBJ_NOTNULL(vcl, VCL_MAGIC);
CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
AZ(pthread_rwlock_rdlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_rdlock(&vcl->temp_rwl));
if (vcl->temp == VCL_TEMP_COOLING) {
AZ(pthread_rwlock_unlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_unlock(&vcl->temp_rwl));
return (1);
}
......@@ -347,7 +348,7 @@ VCL_AddBackend(struct vcl *vcl, struct backend *be)
VBE_Event(be, VCL_EVENT_WARM);
else if (vcl->temp != VCL_TEMP_INIT)
WRONG("Dynamic Backends can only be added to warm VCLs");
AZ(pthread_rwlock_unlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_unlock(&vcl->temp_rwl));
return (0);
}
......@@ -364,10 +365,10 @@ VCL_DelBackend(struct backend *be)
VTAILQ_REMOVE(&vcl->backend_list, be, vcl_list);
Lck_Unlock(&vcl_mtx);
AZ(pthread_rwlock_rdlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_rdlock(&vcl->temp_rwl));
if (VCL_WARM(vcl))
VBE_Event(be, VCL_EVENT_COLD);
AZ(pthread_rwlock_unlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_unlock(&vcl->temp_rwl));
}
static void
......@@ -436,7 +437,7 @@ VCL_Open(const char *fn, struct vsb *msg)
}
ALLOC_OBJ(vcl, VCL_MAGIC);
AN(vcl);
AZ(pthread_rwlock_init(&vcl->temp_rwl, NULL));
AZ(errno=pthread_rwlock_init(&vcl->temp_rwl, NULL));
vcl->dlh = dlh;
vcl->conf = cnf;
return (vcl);
......@@ -451,7 +452,7 @@ VCL_Close(struct vcl **vclp)
vcl = *vclp;
*vclp = NULL;
AZ(dlclose(vcl->dlh));
AZ(pthread_rwlock_destroy(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_destroy(&vcl->temp_rwl));
FREE_OBJ(vcl);
}
......@@ -641,7 +642,7 @@ vcl_set_state(VRT_CTX, const char *state)
assert(ctx->msg != NULL || *state == '0');
vcl = ctx->vcl;
AZ(pthread_rwlock_wrlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_wrlock(&vcl->temp_rwl));
AN(vcl->temp);
switch(state[0]) {
......@@ -683,7 +684,7 @@ vcl_set_state(VRT_CTX, const char *state)
default:
WRONG("Wrong enum state");
}
AZ(pthread_rwlock_unlock(&vcl->temp_rwl));
AZ(errno=pthread_rwlock_unlock(&vcl->temp_rwl));
return (i);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment