From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam To: <9fans@cse.psu.edu> Subject: Re: [9fans] how to avoid a memset() optimization In-Reply-To: <3afa.3e16dd11.67d1a@blake.inputplus.co.uk> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Date: Mon, 6 Jan 2003 10:42:07 -0500 Topicbox-Message-UUID: 3bbf6ab2-eacb-11e9-9e20-41e7f4b1d025 or: { int m=0; if(++m && (res1 = lock(A))) if(++m && (res2 = lock(B))) if(++m && (res3 = lock(C))) { foo(); return success; } switch(m) { case 3: release(B); case 2: release(A); default: return failure; } } you just need a marker to see how far you got. (I'm not even sure what the context of this message is, but every time i see the goto solution to this I have to say something). ;) Cheers, Sam > > failed = 1; > > if ((res1 = lock(A) == 0) { > goto releaseA; > } > if ((res2 = lock(B) == 0) { > goto releaseB; > } > if ((res3 = lock(C) == 0) { > goto releaseC; > } > > foo(res1, res2, res3); > failed = 0; > > releaseC: > release(C); > releaseB: > release(B); > releaseA: > release(A); > > return failed; > > Cheers, > >