site_archiver@lists.apple.com Delivered-To: darwin-kernel@lists.apple.com -Rob -- Rob McKeever, robm@apple.com Mass Storage Group, CPU Software Engineering Apple Computer On Apr 15, 2008, at 3:19 PM, Rob McKeever wrote: I know it's been depricated, but what about using an IOSyncer object? -Rob -- Rob McKeever, robm@apple.com Mass Storage Group, CPU Software Engineering Apple Computer On Apr 14, 2008, at 10:06 PM, Duane Murphy wrote: --- At Tue, 15 Apr 2008 14:43:40 +1000, Godfrey van der Linden wrote: The best IOKit aware equivalent to a condition variable is the IOCommandGate::commandSleep/commandWakeup APIs. On 2008-04-15, at 1:45 , Duane Murphy wrote: Now I need to work out how to do that. Any recommendations for a kernel condition variable? Thanks for the ideas, On 2008-04-12, at 5:08 , Duane Murphy wrote: What is the equivalent of pthread_join() for a kernel thread? ...Duane _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-kernel mailing list (Darwin-kernel@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-kernel/gvdl%40mac.com ...Duane _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-kernel mailing list (Darwin-kernel@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-kernel/robm%40apple.com _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-kernel mailing list (Darwin-kernel@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-kernel/site_archiver%40lists.a... It was pointed out to me off-list that the IOCommandGate::commandSleep/ commandWakeup API is the the proper and blessed alternative to using an IOSyncer. I should have dug into it a bit more before speaking. Hopefully I haven't caused myself too much embarrassment. Unfortunately, I don't recall what it is being replaced with off the top of my head, but it sounds almost exactly like what you're looking for. However the way you describe the problem the reference counting solution seems ideal. Especially as it is a data removal cleanup type of problem. I assume your problem is that you need to execute some code to do the data cleanup? Is that correct? Can you describe the action you want to take on completion? The fundamental problem is that the case that I am working with, the system is either going to sleep, shutting down, or in general going off- line. I can't return from the call that says "you're going off-line" until the other thread has completed and exited. The final stage of the exit of the other thread, records the information about why the thread exited so that it can be brought back up again appropriately. I'm using msleep() and it seems to be doing the job just great. Conveniently all the pieces were there in place; a variable to track the completion, and a mutex lock for that variable. Enter msleep() with a reasonable timeout and a wakeup() call at the end of the thread, and viola. --- At Mon, 14 Apr 2008 11:48:06 +1000, Godfrey van der Linden wrote: There isn't really a 100% reliable way of waiting for a thread to terminate completely. However that isn't really a problem. The key is to recognise what you are really trying to do. Presumably you are trying to clean up resources that the thread may be using? In this case the correct kernel way of cleaning this up is just to reference count your resources. Then it doesn't matter exactly what order the objects get released in. There are a couple of other tricks but the OSObject reference counting will probably get you out of trouble. Thanks for the idea. Unfortunately, in this case I think I need to wait for the thread to stop. The thread is processing data. The data is going to be removed and can't be removed until the processing has been halted and the removal noted. The waiting thread has received the notice that the data is going away and should clean up. I'm going to use a condition variable to signal the end of the thread. I am using IOThreadCreate() to create a new thread. At some later point I indicate to that thread to stop. How do I detect that the thread as exited? This email sent to gvdl@mac.com This email sent to robm@apple.com This email sent to site_archiver@lists.apple.com