Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.2
sblim-sfcb
0009-clean-up-semaphore-array-index-calculation...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0009-clean-up-semaphore-array-index-calculation.patch of Package sblim-sfcb
From 441bc5ea7fd160643521e1a4387d229b6914265f Mon Sep 17 00:00:00 2001 From: =?utf-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@suse.de> Date: Wed, 22 Oct 2008 11:39:11 +0200 Subject: [PATCH] clean up semaphore array index calculation - make constants recognizable as such - provide macros for semaphore array index calculations --- msgqueue.c | 14 +++++++------- msgqueue.h | 21 +++++++++++++-------- providerDrv.c | 44 ++++++++++++++++++++++---------------------- providerMgr.c | 8 ++++---- 4 files changed, 46 insertions(+), 41 deletions(-) diff --git a/msgqueue.c b/msgqueue.c index 8834052..80e3354 100644 --- a/msgqueue.c +++ b/msgqueue.c @@ -130,20 +130,20 @@ int initSem(int https, int shttps, int provs) } sun.val=1; - semctl(sfcbSem,httpGuardId,SETVAL,sun); + semctl(sfcbSem,HTTP_GUARD_ID,SETVAL,sun); sun.val=https; - semctl(sfcbSem,httpProcsId,SETVAL,sun); + semctl(sfcbSem,HTTP_PROCS_ID,SETVAL,sun); sun.val=1; - semctl(sfcbSem,shttpGuardId,SETVAL,sun); + semctl(sfcbSem,SHTTP_GUARD_ID,SETVAL,sun); sun.val=shttps; - semctl(sfcbSem,shttpProcsId,SETVAL,sun); + semctl(sfcbSem,SHTTP_PROCS_ID,SETVAL,sun); for (i=0; i<provs; i++) { sun.val=1; - semctl(sfcbSem,(i*3)+provProcGuardId+provProcBaseId,SETVAL,sun); + semctl(sfcbSem,PROV_GUARD(i),SETVAL,sun); sun.val=0; - semctl(sfcbSem,(i*3)+provProcInuseId+provProcBaseId,SETVAL,sun); - semctl(sfcbSem,(i*3)+provProcAliveId+provProcBaseId,SETVAL,sun); + semctl(sfcbSem,PROV_INUSE(i),SETVAL,sun); + semctl(sfcbSem,PROV_ALIVE(i),SETVAL,sun); } return 0; } diff --git a/msgqueue.h b/msgqueue.h index 612cdb9..41b40c0 100644 --- a/msgqueue.h +++ b/msgqueue.h @@ -157,14 +157,19 @@ extern char *provPauseStr; extern int noHttpPause; extern char *httpPauseStr; -#define httpGuardId 0 -#define httpProcsId 1 -#define shttpGuardId 2 -#define shttpProcsId 3 -#define provProcBaseId 4 -#define provProcGuardId 0 -#define provProcInuseId 1 -#define provProcAliveId 2 +/* relative Ids within the semaphore set */ +#define HTTP_GUARD_ID 0 +#define HTTP_PROCS_ID 1 +#define SHTTP_GUARD_ID 2 +#define SHTTP_PROCS_ID 3 +#define PROV_PROC_BASE_ID 4 +#define PROV_PROC_GUARD_ID 0 +#define PROV_PROC_INUSE_ID 1 +#define PROV_PROC_ALIVE_ID 2 + +#define PROV_GUARD(id) ((id*3)+PROV_PROC_GUARD_ID+PROV_PROC_BASE_ID) +#define PROV_INUSE(id) ((id*3)+PROV_PROC_INUSE_ID+PROV_PROC_BASE_ID) +#define PROV_ALIVE(id) ((id*3)+PROV_PROC_ALIVE_ID+PROV_PROC_BASE_ID) extern ComSockets *sPairs; extern int ptBase,htBase,stBase,htMax,stMax; diff --git a/providerDrv.c b/providerDrv.c index 4299b4e..62aca9d 100644 --- a/providerDrv.c +++ b/providerDrv.c @@ -380,8 +380,8 @@ void* providerIdleThread() if (pInfo) { proc=curProvProc; if (proc) { - semAcquireUnDo(sfcbSem,(proc->id*3)+provProcGuardId+provProcBaseId); - if ((val=semGetValue(sfcbSem,(proc->id*3)+provProcInuseId+provProcBaseId))==0) { + semAcquireUnDo(sfcbSem,PROV_GUARD(proc->id)); + if ((val=semGetValue(sfcbSem,PROV_INUSE(proc->id)))==0) { if ((now-proc->lastActivity)>provTimeoutInterval) { ctx = native_new_CMPIContext(MEM_TRACKED,NULL); noBreak=0; @@ -416,7 +416,7 @@ void* providerIdleThread() } } } - semRelease(sfcbSem,(proc->id*3)+provProcGuardId+provProcBaseId); + semRelease(sfcbSem,PROV_GUARD(proc->id)); } } } @@ -536,9 +536,9 @@ static int getProcess(ProviderInfo * info, ProviderProcess ** proc) for (i = 0; i < provProcMax; i++) { if ((provProc+i) && provProc[i].pid && provProc[i].group && strcmp(provProc[i].group,info->group)==0) { - semAcquire(sfcbSem,(provProc[i].id*3)+provProcGuardId+provProcBaseId); - semRelease(sfcbSem,(provProc[i].id*3)+provProcInuseId+provProcBaseId); - semRelease(sfcbSem,(provProc[i].id*3)+provProcGuardId+provProcBaseId); + semAcquire(sfcbSem,PROV_GUARD(provProc[i].id)); + semRelease(sfcbSem,PROV_INUSE(provProc[i].id)); + semRelease(sfcbSem,PROV_GUARD(provProc[i].id)); info->pid=provProc[i].pid; info->providerSockets=provProc[i].providerSockets; _SFCB_TRACE(1,("--- Process %d shared by %s and %s",provProc[i].pid,info->providerName, @@ -593,12 +593,12 @@ static int getProcess(ProviderInfo * info, ProviderProcess ** proc) info->proc=*proc; info->pid=currentProc; - semSetValue(sfcbSem,((*proc)->id*3)+provProcGuardId+provProcBaseId,0); - semSetValue(sfcbSem,((*proc)->id*3)+provProcInuseId+provProcBaseId,0); - semSetValue(sfcbSem,((*proc)->id*3)+provProcAliveId+provProcBaseId,0); - semReleaseUnDo(sfcbSem,((*proc)->id*3)+provProcAliveId+provProcBaseId); - semReleaseUnDo(sfcbSem,((*proc)->id*3)+provProcInuseId+provProcBaseId); - semRelease(sfcbSem,((*proc)->id*3)+provProcGuardId+provProcBaseId); + semSetValue(sfcbSem,PROV_GUARD((*proc)->id),0); + semSetValue(sfcbSem,PROV_INUSE((*proc)->id),0); + semSetValue(sfcbSem,PROV_ALIVE((*proc)->id),0); + semReleaseUnDo(sfcbSem,PROV_ALIVE((*proc)->id)); + semReleaseUnDo(sfcbSem,PROV_INUSE((*proc)->id)); + semRelease(sfcbSem,PROV_GUARD((*proc)->id)); processProviderInvocationRequests(info->providerName); _SFCB_RETURN(0); @@ -628,15 +628,15 @@ int forkProvider(ProviderInfo * info, OperationHdr * req, char **msg) if (info->pid ) { proc=info->proc; - semAcquire(sfcbSem,(proc->id*3)+provProcGuardId+provProcBaseId); - if ((val=semGetValue(sfcbSem,(proc->id*3)+provProcAliveId+provProcBaseId))) { - semRelease(sfcbSem,(proc->id*3)+provProcInuseId+provProcBaseId); - semRelease(sfcbSem,(proc->id*3)+provProcGuardId+provProcBaseId); + semAcquire(sfcbSem,PROV_GUARD(proc->id)); + if ((val=semGetValue(sfcbSem,PROV_ALIVE(proc->id)))) { + semRelease(sfcbSem,PROV_INUSE(proc->id)); + semRelease(sfcbSem,PROV_GUARD(proc->id)); _SFCB_TRACE(1, ("--- Provider %s still loaded",info->providerName)); _SFCB_RETURN(CMPI_RC_OK) } - semRelease(sfcbSem,(proc->id*3)+provProcGuardId+provProcBaseId); + semRelease(sfcbSem,PROV_GUARD(proc->id)); _SFCB_TRACE(1, ("--- Provider has been unloaded prevously, will reload")); info->pid=0; @@ -2377,7 +2377,7 @@ static BinResponseHdr *loadProvider(BinRequestHdr * hdr, ProviderInfo * info, in BinResponseHdr *resp; char dlName[512]; - _SFCB_TRACE(1, ("--- Loading Provide %s %s %s", (char *) req->className.data, + _SFCB_TRACE(1, ("--- Loading provider %s %s %s", (char *) req->className.data, (char *) req->provName.data, (char *) req->libName.data)); info = (ProviderInfo *) calloc(1, sizeof(*info)); @@ -2518,7 +2518,7 @@ static void *processProviderInvocationRequestsThread(void *prms) int i,requestor=0,initRc=0; _SFCB_ENTER(TRACE_PROVIDERDRV, "processProviderInvocationRequestsThread"); - + for (i = 0; i < req->count; i++) if (req->object[i].length) req->object[i].data=(void*)((long)req->object[i].data+(char*)req); @@ -2567,7 +2567,7 @@ static void *processProviderInvocationRequestsThread(void *prms) } else { - _SFCB_TRACE(1, ("--- Provider request for %s %p %x", + _SFCB_TRACE(1, ("--- Provider request for op:%s pInfo:%p prov:%x", opsName[req->operation],pInfo,req->provId)); if (req->flags & FL_chunked) requestor=parms->requestor; @@ -2673,7 +2673,7 @@ void processProviderInvocationRequests(char *name) debugMode=pauseProvider(name); for (;;) { - _SFCB_TRACE(1, ("--- Waiting for provider request to %d-%lu", + _SFCB_TRACE(1, ("--- Waiting for provider request to R%d-%lu", providerSockets.receive,getInode(providerSockets.receive))); parms = (Parms *) malloc(sizeof(*parms)); @@ -2683,7 +2683,7 @@ void processProviderInvocationRequests(char *name) int debug_break = 0; if (rc!=0)mlogf(M_ERROR,M_SHOW,"oops\n"); - _SFCB_TRACE(1, ("--- Got something %d-%p on %d-%lu", + _SFCB_TRACE(1, ("--- Got something op:%d-prov:%p on R%d-%lu", parms->req->operation,parms->req->provId, providerSockets.receive,getInode(providerSockets.receive))); diff --git a/providerMgr.c b/providerMgr.c index 595c8e7..99e0292 100644 --- a/providerMgr.c +++ b/providerMgr.c @@ -922,10 +922,10 @@ static void setInuseSem(void *id) ids.ids=id; - semAcquire(sfcbSem,(ids.procId*3)+provProcGuardId+provProcBaseId); - semAcquire(sfcbSem,(ids.procId*3)+provProcInuseId+provProcBaseId); - semReleaseUnDo(sfcbSem,(ids.procId*3)+provProcInuseId+provProcBaseId); - semRelease(sfcbSem,(ids.procId*3)+provProcGuardId+provProcBaseId); + semAcquire(sfcbSem,PROV_GUARD(ids.procId)); + semAcquire(sfcbSem,PROV_INUSE(ids.procId)); + semReleaseUnDo(sfcbSem,PROV_INUSE(ids.procId)); + semRelease(sfcbSem,PROV_GUARD(ids.procId)); _SFCB_EXIT(); } -- 1.6.0.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor