Skip to content

Commit 43af9e0

Browse files
committed
nuke-redundant-interpreter-locks-experiment
1 parent 918a432 commit 43af9e0

2 files changed

Lines changed: 2 additions & 16 deletions

File tree

src/modules/perl/modperl_interp.c

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ modperl_interp_t *modperl_interp_new(modperl_interp_pool_t *mip,
4848

4949
interp->mip = mip;
5050
interp->refcnt = 0;
51-
MUTEX_INIT(&interp->lock);
5251

5352
if (perl) {
5453
#ifdef MP_USE_GTOP
@@ -129,7 +128,6 @@ void modperl_interp_destroy(modperl_interp_t *interp)
129128

130129
modperl_xs_dl_handles_close(handles);
131130

132-
MUTEX_DESTROY(&interp->lock);
133131
free(interp);
134132

135133
}
@@ -269,22 +267,19 @@ apr_status_t modperl_interp_unselect(void *data)
269267
modperl_interp_t *interp = (modperl_interp_t *)data;
270268
modperl_interp_pool_t *mip = interp->mip;
271269
modperl_tipool_t *tipool = mip->tipool;
272-
MUTEX_LOCK(&interp->lock);
273270
MP_ASSERT(interp && MpInterpIN_USE(interp) && interp->refcnt > 0);
274271
MP_TRACE_i(MP_FUNC, "unselect(interp=%pp): refcnt=%d",
275272
interp, interp->refcnt);
276273

277274
if (--interp->refcnt > 0) {
278275
MP_TRACE_i(MP_FUNC, "interp=0x%lx, refcnt=%d -- interp still in use",
279276
(unsigned long)interp, interp->refcnt);
280-
MUTEX_UNLOCK(&interp->lock);
281277
return APR_SUCCESS;
282278
}
283279

284280
if (!MpInterpIN_USE(interp)){
285281
MP_TRACE_i(MP_FUNC, "interp=0x%pp, refcnt=%d -- interp already not in use",
286282
interp, interp->refcnt);
287-
MUTEX_UNLOCK(&interp->lock);
288283
return APR_SUCCESS;
289284
}
290285

@@ -307,7 +302,7 @@ apr_status_t modperl_interp_unselect(void *data)
307302
MP_TRACE_i(MP_FUNC, "interp=%pp freed, tipool(size=%ld, in_use=%ld)",
308303
interp, tipool->size, tipool->in_use);
309304
}
310-
MUTEX_UNLOCK(&interp->lock);
305+
311306
return APR_SUCCESS;
312307
}
313308

@@ -434,7 +429,7 @@ modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c, server_rec
434429
if (!((r || c) && modperl_threaded_mpm())) {
435430
interp = scfg->mip->parent;
436431
MpInterpIN_USE_On(interp);
437-
interp->refcnt++;
432+
interp->refcnt = 1;
438433
/* XXX: if no VirtualHosts w/ PerlOptions +Parent we can skip this */
439434
PERL_SET_CONTEXT(interp->perl);
440435
/* let the perl interpreter point back to its interp */
@@ -457,14 +452,9 @@ modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c, server_rec
457452
if (c)
458453
ccfg = modperl_config_con_get(c);
459454

460-
static perl_mutex lock = PTHREAD_MUTEX_INITIALIZER;
461-
MUTEX_LOCK(&lock);
462455
if (p && (interp = modperl_interp_pool_get(p)) && MpInterpIN_USE(interp)) {
463-
MUTEX_LOCK(&interp->lock);
464-
MUTEX_UNLOCK(&lock);
465456
interp->refcnt++;
466457
interp->num_requests++;
467-
MUTEX_UNLOCK(&interp->lock);
468458
MP_TRACE_i(MP_FUNC,
469459
"found interp 0x%lx (perl=0x%pp) in r->pool config, refcnt=%d",
470460
(unsigned long)interp, interp->perl, interp->refcnt);
@@ -475,7 +465,6 @@ modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c, server_rec
475465
MP_TRACE_i(MP_FUNC,
476466
"fetching interp for %s:%d", s->server_hostname, s->port);
477467
interp = modperl_interp_get(s);
478-
MUTEX_LOCK(&interp->lock);
479468
MP_TRACE_i(MP_FUNC, " --> got %pp (perl=%pp)", interp, interp->perl);
480469
++interp->num_requests; /* should only get here once per request */
481470
interp->refcnt = 1;
@@ -512,8 +501,6 @@ modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c, server_rec
512501
*/
513502
interp->refcnt++, set_interp(p), interp->pool = p;
514503

515-
MUTEX_UNLOCK(&interp->lock);
516-
MUTEX_UNLOCK(&lock);
517504
return interp;
518505
}
519506

src/modules/perl/modperl_types.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ struct modperl_interp_t {
6767
#ifdef MP_TRACE
6868
unsigned long tid;
6969
#endif
70-
perl_mutex lock;
7170
};
7271

7372
typedef struct {

0 commit comments

Comments
 (0)