<div dir="ltr">Thanks, that makes sense.  The problem is that Host::LaunchProcess doesn't really return anything useful.  When I create a process on Windows, I get a HANDLE back that I can use to later manipulate the process.  Note that this isn't the same as a Pid.  I guess Host::LaunchProcess will return the pid in the launch_info structure, which I could then use to get another handle, but that would involve closing the first handle before I get the second handle, which I'm a little wary of, and I would feel better just using the original handle.  But there's no obvious way to pass it back.<div>
<br></div><div><div>I'm not sure what the right abstraction is here that would make sense on all platforms, but I feel like what is needed is some kind of NativeProcess class, and LaunchProcess's signature could change to this:</div>
</div><div><br></div><div><span style="font-family:arial,sans-serif;font-size:13px">static Error</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">Host::LaunchProcess (ProcessLaunchInfo &launch_info, NativeProcess **process);</span><br>
</div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">If the user passes in NULL, then we just clean up the process handle (or do nothing, depending on platform), and if it's not NULL, then Host allocates the appropriate type of Platform specific Process object.  For example, it allocates a NativeProcessLinux, or a NativeProcessMacOSX, or a NativeProcessWindows, etc.  </span></div>
<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Do you think something like this could work?  Or maybe have other ideas?</span></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 12, 2014 at 3:47 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">You should be implementing the launching in your Host layer one time:<br>
<br>
    static Error<br>
    Host::LaunchProcess (ProcessLaunchInfo &launch_info);<br>
<br>
Then you should be using this in your ProcessPluginWindows plug-in.<br>
<div class="im HOEnZb"><br>
> On Aug 8, 2014, at 5:14 PM, Zachary Turner <<a href="mailto:zturner@google.com">zturner@google.com</a>> wrote:<br>
><br>
> Why are there different code paths for launching a process through these two methods?  Shouldn't there just be one codepath for launching a process?<br>
><br>
> I've implemented a very primitive process launch for Windows in ProcessPluginWindows::DoLaunch, but now I'm running into cases where tests are failing because Host::LaunchProcess isn't implemented yet on Windows.  What do I need to understand about the differences between these two codepaths to make sure I implement the two correctly?  And is there perhaps a way to refactor some of this code so that all of the process-spawning code lives in the same place, and the launch args are flexible enough to support all of the different use cases?<br>

</div><div class="HOEnZb"><div class="h5">> _______________________________________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@cs.uiuc.edu">lldb-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
<br>
</div></div></blockquote></div><br></div>