Hi, At Tue, 20 Jul 2010 04:21:37 +0900, Ricardo Panaggio wrote in [ruby-core:31358]: > (Caleb shared this idea with me) Wouldn't it be good to wake up all > threads from @waiting before freeing the Queue, so that they can raise > the proper exceptions? This way, the kill could be treated more > properly. Because dfree function is called *after* the objects were collected. Your benchmark segfaulted soon as the first run ended. > I don't get how memsize works. I mean, condvar_memsize, queue_memsize > and szqueue_memsize have a lot in common. If they are correct (and I > assume they are), then I assume that thread_memsize and > thgroup_memsize might not be, as the respective structs have fields of > common types, and the _memsize's are not coherent with the structs > definition. Because I changed the member objects to be hidden, so the memory used by these objects can't be counted with ObjectSpace. > And I didn't get why the RBASIC from queue_initialize is there. Why > should it be treated as a generic object, rather than its original > class? It may have a purpose, I just was wondering what it was. I > couldn't manage to understand that by myself =/ To hide the internal member from the ObjectSpace. > And, my last question, should I implement other sync primitives with > or without the Thread namespace? I see that you've put C > implementations for Queue, SizedQueue and ConditionVariable in there, > but will the ruby implementations be kept? Will they be outside any > namespace? Should I implement new sync primitives directly in C only, > or it's good to implement them in both ruby and C? Should I keep C > implementations inside Thread and ruby implementations without a > namespace? Just I wanted to run the benchmark at once. > Sorry for being so much pedantic. I just want to be sure that I can > help more on my next patches, writing better code, that could be > reviewed more easily, and that could improve ruby better =) > > Thanks for all the help! Thanks for the contribution. -- Nobu Nakada