def signal_handler(signal, frame): #shm.remove_memory(tab.shm_obj.shmid) #shm.remove_semaphore(tab.sem_obj.semid) global tab tlog("shared objects are destroyed:start") try: shm.remove_semaphore(tab.sem_obj.semid) except: tlog("an error occured while destroying the semaphore" + str(sys.exc_info())) pass try: try: tab.shm_obj.detach() except: pass shm.remove_memory(tab.shm_obj.shmid) except: tlog("an error occured while destroying the shared memory" + str(sys.exc_info()[0])) pass tlog("shared objects are destroyed:end") sys.exit(0)
def delete(self): # First remove semaphore try: shm.remove_semaphore(self.semid) except: pass # Then remove status shm try: self.stat_buf.remove() except: pass
def delete(self): # Remove status shm try: shm.remove_semaphore(self.semid) except: pass # Then remove databuf shm try: self.buf.remove() except: pass
def signal_handler(signal, frame): #shm.remove_memory(tab.shm_obj.shmid) #shm.remove_semaphore(tab.sem_obj.semid) global tab tlog("shared objects are destroyed:start") try : shm.remove_semaphore(tab.sem_obj.semid) except : tlog("an error occured while destroying the semaphore" + str(sys.exc_info())) pass try : try : tab.shm_obj.detach() except : pass shm.remove_memory(tab.shm_obj.shmid) except : tlog("an error occured while destroying the shared memory" + str(sys.exc_info()[0])) pass tlog("shared objects are destroyed:end") sys.exit(0)
SemaphoreHandle.V() say("waiting for semaphore") SemaphoreHandle.P() # Once the call to .P() completes, I own the semaphore and I'm free to write to # the memory. s = ReadFromMemory(MemoryHandle) # What I read must be the md5 of what I wrote or something's gone wrong. try: assert (s == md5.new(WhatIWrote).hexdigest()) except: raise AssertionError, "Shared memory corruption after %d iterations." % i WhatIWrote = md5.new(s).hexdigest() WriteToMemory(MemoryHandle, WhatIWrote) # Announce for one last time that the semaphore is free again so that Mrs. Conclusion can exit. if DemoConstants.USE_SEMAPHORE: say("Final forfeit of semaphore") SemaphoreHandle.V() time.sleep(5) # ...before beginning to wait until it is free again. say("Final wait for semaphore") SemaphoreHandle.P() say("Destroying semaphore and shared memory.") shm.remove_memory(MemoryHandle.shmid) shm.remove_semaphore(SemaphoreHandle.semid)
def remove(self): shm.remove_semaphore(self._SemaphoreHandle.semid) self._SemaphoreHandle = None
def remove_semaphore(key): # Destroys the semaphore. Raises KeyError if the key doesn't exist. shm.remove_semaphore(shm.getsemid(key))