[Lldb-commits] [PATCH] Refactor Socket into a first class Host-object
Greg Clayton
gclayton at apple.com
Wed Jul 30 18:16:58 PDT 2014
A few comments:
- Any lldb_private forward declarations should be added to "include/lldb/lldb-forward.h" and then that file should be included instead of inlining any forward declarations manually. Also if you are going to use shared pointers to then there is a section in lldb-forward.h at the bottom where you should declare them like the others.
namespace lldb_private {
+class Error;
+class Socket;
- Can we rename IoObject to IOObject? Or is there a better name? IOConnection? IOFile?
- Add the "_sp" suffix to each of these and use IOObjectSP that you define in lldb-forward.h:
+ std::shared_ptr<IoObject> m_read;
+ std::shared_ptr<IoObject> m_write;
- We have been using the "_ap" suffix for auto pointers, but we are slowly transitioning to using a "_up" for the unique pointers.
+ std::unique_ptr<Socket> m_listening_socket; // For listen/accept connections, hold onto the
These make me nervous and should probably return a pointer or a shared pointer, not a reference unless they are private and are known to be used only when these are valid:
+ IoObject& GetReadObject() { return *m_read; }
+ const IoObject& GetReadObject() const { return *m_read; }
This kind of code seems like we are trying to make a new class IoObject, but don't want to correctly abstract it down to a virtual class that can do everything that we need of it. Seems like we should add a GetBoundPort(...) to the IoObject class and have it return something invalid instead of casting and having to know what the IoObject is and cast it:
+ if (read_object.GetFdType() == IoObject::eFDTypeSocket)
{
- char port_cstr[32];
- snprintf(port_cstr, sizeof(port_cstr), "127.0.0.1:%i", out_port);
- // Send the host and port down that debugserver and specify an option
- // so that it connects back to the port we are listening to in this process
- debugserver_args.AppendArgument("--reverse-connect");
- debugserver_args.AppendArgument(port_cstr);
+ Socket& tcp_socket = static_cast<Socket&>(read_object);
+ assert(tcp_socket.GetSocketProtocol() == Socket::ProtocolTcp);
+ out_port = tcp_socket.GetBoundPort(10);
Other than that, lots of code has moved around into the host layer but it is mostly the same. So looks good.
> On Jul 28, 2014, at 4:57 PM, Zachary Turner <zturner at google.com> wrote:
>
> This fixes the crashing in lldb-gdbserver, and should include all of the necessary things to get it to compile on MacOSX as well. (I have a request for my own Mac workstation pending, until then I have to cross my fingers and hope I did it right).
>
> lldb-gdbserver tests still fail, but now it's because of a pipe that's not getting any data. I suspect that all the remaining test failures now have the same underlying cause. Still investigating exactly what that might be, though.
>
> http://reviews.llvm.org/D4641
>
> Files:
> include/lldb/Core/ConnectionFileDescriptor.h
> include/lldb/Host/Editline.h
> include/lldb/Host/File.h
> include/lldb/Host/IoObject.h
> include/lldb/Host/Socket.h
> lldb.xcodeproj/project.pbxproj
> source/Core/ConnectionFileDescriptor.cpp
> source/Host/common/CMakeLists.txt
> source/Host/common/File.cpp
> source/Host/common/IoObject.cpp
> source/Host/common/Socket.cpp
> source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
> source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
> tools/lldb-gdbserver/lldb-gdbserver.cpp
> tools/lldb-platform/lldb-platform.cpp
> <D4641.11964.patch>_______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
More information about the lldb-commits
mailing list