From: Junio C Hamano Date: Wed, 07 Apr 2010 05:21:12 GMT Subject: Re: [PATCH v2] Make xmalloc and xrealloc thread-safe Message-ID: <7vk4sjg7nb.fsf@alter.siamese.dyndns.org> In-Reply-To: <20100407031655.GA7156@spearce.org> "Shawn O. Pearce" writes: >> +static void try_to_free_from_threads(size_t size) >> +{ >> + int self = pthread_equal(read_mutex_owner, pthread_self()); >> + if (!self) >> + read_lock(); >> + release_pack_memory(size, -1); >> + if (!self) >> + read_unlock(); >> +} > > Is there any concern that a partially unset read_mutex_owner might > look like the current thread's identity? > > That is, memset() can be setting the bytes one by one. If the lock > is being released we might observe the current owner as ourselves > if we see only part of that release, and our identity is the same > as another thread, only with the lower-address bytes unset. Yuck. I hope that it doesn't mean we need another mutex to protect the owner data.