You could probably maintain these:

ThreadList newWindowsThreads;
ThreadList deadWindowsThreads;

As just vectors of your handles:

std::vector<HANDLE> newWindowsThreadHandles;
std::vector<HANDLE> deadWindowsThreadHandles;

Then in:

bool
ProcessWindows::UpdateThreadList (ThreadList &old_thread_list, ThreadList 
&new_thread_list)

You can search the old_thread_list and see if any of these have handles that 
are in deadWindowsThreadHandles and if so don't copy them over into 
new_thread_list, and if they aren't do copy them over. Then you would create 
new windows threads (subclasses of lldb_private::Thread) for all items in 
newWindowsThreadHandles...

There is no need to create any lldb_private::Thread subclasses objects until 
you have a stop that might use them for debugger purposes as the thread might 
be created and also die before you stop, so you would want to remove any items 
from newWindowsThreadHandles that are in deadWindowsThreadHandles or remove 
dead threads from newWindowsThreadHandles without adding them to 
deadWindowsThreadHandles if they already exist in newWindowsThreadHandles 
before a stop comes along...

> On Nov 14, 2014, at 4:20 PM, Zachary Turner <ztur...@google.com> wrote:
> 
> 
> 
> On Fri Nov 14 2014 at 4:13:17 PM <jing...@apple.com> wrote:
> 
> > On Nov 14, 2014, at 3:46 PM, Zachary Turner <ztur...@google.com> wrote:
> >
> > It's possible, but Windows gives us a handle to the thread which has all 
> > privileges associated with it (in other words we can use it for just about 
> > anything), so it's considered better to use the handle windows gives us. At 
> > the very least we'd want to queue up all the incoming event notifications 
> > that we get from this loop, and then use it to update the state when 
> > someone stops.
> 
> You get one view of the thread if you catch the event but another if you 
> enumerate them when stopped?  That's awkward.
> 
> It's likely possible to get the same view of the thread, but there's no 
> guarantee.  handles are funny things, and there's a huge amount of complexity 
> and security checks that go on behind the scenes when you try to open a 
> handle, so it's safer to just use the one that's been blessed by the OS.
> 
> Thanks for the additional explanations
> 
> 


_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to