fix a couple of bugs in sem.c:
fix a couple of bugs in sem.c:

one big one, if a sem was acquired with a timeout and released before the timeout, the timer struct is left on the stack. I'm totally suprised that made it this far.
second one is a edge case that would have resulted in a spinlock released twice.


git-svn-id: fb278a52ad97f7fbef074986829f2c6a2a3c4b34@402 c25cc9d1-44fa-0310-b259-ad778cb1d433

travisg/newos,siraj/newos,travisg/newos,siraj/newos,zhouxh1023/newos,siraj/newos,dioptre/newos,travisg/newos,dioptre/newos,siraj/newos,zhouxh1023/newos,dioptre/newos,zhouxh1023/newos