{"push_id":566286448,"size":2,"distinct_size":2,"ref":"refs/heads/master","head":"bf204dacf77e1f23138077e2d48d5de53d9575cf","before":"41f8454627717941883adb853aa013dd58aeebee","commits":[{"sha":"7d209b4cd389131395cc844d745c2103969f115c","author":{"email":"26be337005d16234a6293888b3cd358910176d50@gmail.com","name":"Russell Gray"},"message":"Call TryGetValue in overload of ConcurrentDictionary.GetOrAdd to avoid acquiring lock\n\nThere are two overloads of ConcurrentDictionary.GetOrAdd. One accepts a factory\nmethod to generate the value if the key is not found, and calls TryGetValue for\nthe existence check which is a lock-free operation.\n\nThe other overload, however, does not call TryGetValue - it simply calls\nstraight through to TryAddInternal, which will obtain a bucket lock *before it\ndoes the existence check*. This violates the documented claim of\nConcurrentDictionary of lock-free reads. This commit simply adds the same\nTryGetValue check, making the two overloads consistent.","distinct":true,"url":"https://api.github.com/repos/nguerrera/corefx/commits/7d209b4cd389131395cc844d745c2103969f115c"},{"sha":"bf204dacf77e1f23138077e2d48d5de53d9575cf","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"Stephen Toub"},"message":"Merge pull request #631 from russgray/master\n\nCall TryGetValue in overload of ConcurrentDictionary.GetOrAdd to avoid acquiring lock","distinct":true,"url":"https://api.github.com/repos/nguerrera/corefx/commits/bf204dacf77e1f23138077e2d48d5de53d9575cf"}]}