[PATCH 1/3] msvcrt: Lock the heap in _callnewh

Martin Storsjö martin at martin.st
Fri Nov 6 04:53:42 CST 2015


On Fri, 6 Nov 2015, Piotr Caban wrote:

> On 11/06/15 11:28, Martin Storsjo wrote:
>>   int CDECL _callnewh(MSVCRT_size_t size)
>>   {
>> +  int ret = 0;
>> +  LOCK_HEAP;
>>     if(MSVCRT_new_handler)
>> -    (*MSVCRT_new_handler)(size);
>> -  return 0;
>> +    ret = (*MSVCRT_new_handler)(size);
>> +  UNLOCK_HEAP;
>> +  return ret;
>>   }
> It doesn't make sense to lock heap cs in this case. Native is not doing it 
> (at least in case of msvcp90.dll).

Hmm, but wouldn't it risk a race with another thread doing set_new_handler 
then? OTOH I guess that's ok/expected?

But there's a similar lock in MSVCRT_operator_new; should we do the same 
locking on the msvcp side instead then, or just skip it altogether?

> The return value change looks almost correct - the function only returns 
> 0 or 1.

Ok, so should I force the return value to 0 or 1 regardless of what the 
function returns? I.e.
ret = (*MSVCRT_new_handler)(size) ? 1 : 0;

(or !!), or should I just repost it without the locking?

// Martin



More information about the wine-devel mailing list