I'm somewhat concerned about following scenario:

File file_obj(...);
LockFile lock (file_obj.GetDescriptor ());
..

My understanding, that on Windows if LockFile duplicates original handle
(i.e. file.GetDescriptor ()) only a duplicated handle will be allowed to
call IO functions on this file within locked region, meanwhile file_obj
will be blocked on IO.
If LockFile just holds a reference to original handle then file_obj can
proceed on IO operations in exclusive mode.

In order to make it clear that LockFile references File we can make
 LockFile to take File& as constructor parameter instead of a raw handle.

On Thu, May 21, 2015 at 10:28 AM, Zachary Turner <ztur...@google.com> wrote:

> Why does someone other than the LockFile object care about holding a raw
> handle? Shouldn't it just hold a reference/pointer to the LockFile?
> On Thu, May 21, 2015 at 10:06 AM Oleksiy Vyalov <ovya...@google.com>
> wrote:
>
>> Windows file lock is tied to a file handle - using handle duplication
>> effectively applies locking on duplicated handle, not on original, so your
>> original handle will be blocked on IO trying to read/write.
>> Maybe we can just eliminate CloseHandle call (
>> https://github.com/llvm-mirror/lldb/blob/master/source/Host/windows/LockFileWindows.cpp#L50)
>> if file will be eventually closed by LockFileWindows caller.
>>
>> On Thu, May 21, 2015 at 9:58 AM, Zachary Turner <ztur...@google.com>
>> wrote:
>>
>>> I don't experience this crash but looking at the proposed fix it
>>> certainly seems like a plausible explanation. Seems to me like something
>>> should transfer ownership though rather than duplicating the handle
>>>
>>> On Thu, May 21, 2015 at 9:52 AM Colin Riley <co...@codeplay.com> wrote:
>>>
>>>>  Windows 7 64, Debug, latest vs13.
>>>>
>>>>
>>>> On 21/05/2015 17:39, Oleksiy Vyalov wrote:
>>>>
>>>> Hi Colin,
>>>>
>>>>  could you give more context about crash - what build configuration do
>>>> you use (debug, release,..) and which OS?
>>>> I'm running this code on Windows 7 and haven't noticed any failures.
>>>>
>>>>
>>>> On Thu, May 21, 2015 at 8:57 AM, Colin Riley <co...@codeplay.com>
>>>> wrote:
>>>>
>>>>>
>>>>> Zachary, do you see this on windows at all? Tip for us results in
>>>>> crashes when releasing file descriptors without the below fix.
>>>>>
>>>>> Colin
>>>>>
>>>>>
>>>>> On 19/05/2015 12:52, Aidan Dodds wrote:
>>>>>
>>>>>  Hi,
>>>>>
>>>>> We have been seeing a crash on windows when connecting to an android
>>>>> target using lldb-server.
>>>>> I am not sure if this affects other platforms too.
>>>>> I think this was introduced with http://reviews.llvm.org/D9056.
>>>>>
>>>>> I tracked the crash back to the workings of ModuleCache::GetAndPut().
>>>>>
>>>>> The crash seems to be due to a file descriptor being released twice,
>>>>> once by the original "File lock_file" and again by the "LockFile lock" who
>>>>> share the same file descriptor.
>>>>>
>>>>> The file descriptor sharing happens because of this line:
>>>>> ModuleCache.cpp @ 164
>>>>> LockFile lock (lock_file.GetDescriptor ());
>>>>>
>>>>> Both destructors attempt to release effectively the same file
>>>>> descriptor.  I was able to fix the crash by duplicating the file handle in
>>>>> the lock file constructor using _dup().  (patch attached)
>>>>> I wasn't sure if this was the right fix however. Has anyone else seen
>>>>> this?
>>>>> Should "File lock_file" perhaps transfer its file descriptor
>>>>> completely rather then share it?
>>>>>
>>>>> Thanks,
>>>>> Aidan
>>>>>
>>>>>
>>>>>  _______________________________________________
>>>>> lldb-dev mailing 
>>>>> listlldb-...@cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>>>>
>>>>>
>>>>> --
>>>>> - Colin Riley
>>>>> Senior Director,
>>>>> Parallel/Graphics Debugger Systems
>>>>>
>>>>> Codeplay Software Ltd
>>>>> 45 York Place, Edinburgh, EH1 3HP
>>>>> Tel: 0131 466 0503
>>>>> Fax: 0131 557 6600
>>>>> Website: http://www.codeplay.com
>>>>> Twitter: https://twitter.com/codeplaysoft
>>>>>
>>>>> This email and any attachments may contain confidential and /or 
>>>>> privileged information and is for use by the addressee only. If you are 
>>>>> not the intended recipient, please notify Codeplay Software Ltd 
>>>>> immediately and delete the message from your computer. You may not copy 
>>>>> or forward it,or use or disclose its contents to any other person. Any 
>>>>> views or other information in this message which do not relate to our 
>>>>> business are not authorized by Codeplay software Ltd, nor does this 
>>>>> message form part of any contract unless so stated.
>>>>> As internet communications are capable of data corruption Codeplay 
>>>>> Software Ltd does not accept any responsibility for any changes made to 
>>>>> this message after it was sent. Please note that Codeplay Software Ltd 
>>>>> does not accept any liability or responsibility for viruses and it is 
>>>>> your responsibility to scan any attachments.
>>>>> Company registered in England and Wales, number: 04567874
>>>>> Registered office: 81 Linkfield Street, Redhill RH1 6BY
>>>>>
>>>>>
>>>>
>>>>
>>>>  --
>>>>  Oleksiy Vyalov | Software Engineer | ovya...@google.com
>>>>
>>>>
>>>> --
>>>> - Colin Riley
>>>> Senior Director,
>>>> Parallel/Graphics Debugger Systems
>>>>
>>>> Codeplay Software Ltd
>>>> 45 York Place, Edinburgh, EH1 3HP
>>>> Tel: 0131 466 0503
>>>> Fax: 0131 557 6600
>>>> Website: http://www.codeplay.com
>>>> Twitter: https://twitter.com/codeplaysoft
>>>>
>>>> This email and any attachments may contain confidential and /or privileged 
>>>> information and is for use by the addressee only. If you are not the 
>>>> intended recipient, please notify Codeplay Software Ltd immediately and 
>>>> delete the message from your computer. You may not copy or forward it,or 
>>>> use or disclose its contents to any other person. Any views or other 
>>>> information in this message which do not relate to our business are not 
>>>> authorized by Codeplay software Ltd, nor does this message form part of 
>>>> any contract unless so stated.
>>>> As internet communications are capable of data corruption Codeplay 
>>>> Software Ltd does not accept any responsibility for any changes made to 
>>>> this message after it was sent. Please note that Codeplay Software Ltd 
>>>> does not accept any liability or responsibility for viruses and it is your 
>>>> responsibility to scan any attachments.
>>>> Company registered in England and Wales, number: 04567874
>>>> Registered office: 81 Linkfield Street, Redhill RH1 6BY
>>>>
>>>>
>>
>>
>> --
>> Oleksiy Vyalov | Software Engineer | ovya...@google.com
>>
>


-- 
Oleksiy Vyalov | Software Engineer | ovya...@google.com
_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to