diff options
Diffstat (limited to 'Libraries')
-rw-r--r-- | Libraries/LibCore/CHttpJob.cpp | 2 | ||||
-rw-r--r-- | Libraries/LibCore/CHttpJob.h | 2 | ||||
-rw-r--r-- | Libraries/LibCore/CObject.h | 14 | ||||
-rw-r--r-- | Libraries/LibCore/CTCPServer.cpp | 4 | ||||
-rw-r--r-- | Libraries/LibCore/CTCPServer.h | 2 | ||||
-rw-r--r-- | Libraries/LibCore/CTCPSocket.cpp | 2 | ||||
-rw-r--r-- | Libraries/LibCore/CTCPSocket.h | 6 | ||||
-rw-r--r-- | Libraries/LibCore/CoreIPCClient.h | 2 | ||||
-rw-r--r-- | Libraries/LibCore/CoreIPCServer.h | 2 | ||||
-rw-r--r-- | Libraries/LibGUI/GEventLoop.h | 1 |
10 files changed, 21 insertions, 16 deletions
diff --git a/Libraries/LibCore/CHttpJob.cpp b/Libraries/LibCore/CHttpJob.cpp index 716d170acb..472aae01d9 100644 --- a/Libraries/LibCore/CHttpJob.cpp +++ b/Libraries/LibCore/CHttpJob.cpp @@ -116,7 +116,7 @@ void CHttpJob::finish_up() void CHttpJob::start() { ASSERT(!m_socket); - m_socket = new CTCPSocket(this); + m_socket = CTCPSocket::construct(this); m_socket->on_connected = [this] { dbg() << "CHttpJob: on_connected callback"; on_socket_connected(); diff --git a/Libraries/LibCore/CHttpJob.h b/Libraries/LibCore/CHttpJob.h index becc6a030f..d0aa714920 100644 --- a/Libraries/LibCore/CHttpJob.h +++ b/Libraries/LibCore/CHttpJob.h @@ -26,7 +26,7 @@ private: }; CHttpRequest m_request; - CTCPSocket* m_socket { nullptr }; + ObjectPtr<CTCPSocket> m_socket; State m_state { State::InStatus }; int m_code { -1 }; HashMap<String, String> m_headers; diff --git a/Libraries/LibCore/CObject.h b/Libraries/LibCore/CObject.h index bfe9a14f00..95fea75590 100644 --- a/Libraries/LibCore/CObject.h +++ b/Libraries/LibCore/CObject.h @@ -1,11 +1,12 @@ #pragma once -#include <AK/String.h> #include <AK/Function.h> #include <AK/IntrusiveList.h> #include <AK/StdLibExtras.h> +#include <AK/String.h> #include <AK/Vector.h> #include <AK/Weakable.h> +#include <LibCore/ObjectPtr.h> namespace AK { class JsonObject; @@ -16,9 +17,14 @@ class CChildEvent; class CCustomEvent; class CTimerEvent; -#define C_OBJECT(klass) \ -public: \ - virtual const char* class_name() const override { return #klass; } +#define C_OBJECT(klass) \ +public: \ + virtual const char* class_name() const override { return #klass; } \ + template<class... Args> \ + static inline ObjectPtr<klass> construct(Args&&... args) \ + { \ + return ObjectPtr<klass>(new klass(forward<Args>(args)...)); \ + } class CObject : public Weakable<CObject> { // NOTE: No C_OBJECT macro for CObject itself. diff --git a/Libraries/LibCore/CTCPServer.cpp b/Libraries/LibCore/CTCPServer.cpp index c1e61994c5..71a2b15906 100644 --- a/Libraries/LibCore/CTCPServer.cpp +++ b/Libraries/LibCore/CTCPServer.cpp @@ -40,7 +40,7 @@ bool CTCPServer::listen(const IPv4Address& address, u16 port) return true; } -CTCPSocket* CTCPServer::accept() +ObjectPtr<CTCPSocket> CTCPServer::accept() { ASSERT(m_listening); sockaddr_in in; @@ -51,5 +51,5 @@ CTCPSocket* CTCPServer::accept() return nullptr; } - return new CTCPSocket({}, accepted_fd); + return CTCPSocket::construct(accepted_fd); } diff --git a/Libraries/LibCore/CTCPServer.h b/Libraries/LibCore/CTCPServer.h index 09b3852118..67b551e22c 100644 --- a/Libraries/LibCore/CTCPServer.h +++ b/Libraries/LibCore/CTCPServer.h @@ -15,7 +15,7 @@ public: bool is_listening() const { return m_listening; } bool listen(const IPv4Address& address, u16 port); - CTCPSocket* accept(); + ObjectPtr<CTCPSocket> accept(); Function<void()> on_ready_to_accept; diff --git a/Libraries/LibCore/CTCPSocket.cpp b/Libraries/LibCore/CTCPSocket.cpp index 5f5ebb79da..060b76cd6b 100644 --- a/Libraries/LibCore/CTCPSocket.cpp +++ b/Libraries/LibCore/CTCPSocket.cpp @@ -2,7 +2,7 @@ #include <sys/socket.h> #include <errno.h> -CTCPSocket::CTCPSocket(Badge<CTCPServer>, int fd, CObject* parent) +CTCPSocket::CTCPSocket(int fd, CObject* parent) : CSocket(CSocket::Type::TCP, parent) { set_fd(fd); diff --git a/Libraries/LibCore/CTCPSocket.h b/Libraries/LibCore/CTCPSocket.h index 7eccc7a6b7..c183d6e1c5 100644 --- a/Libraries/LibCore/CTCPSocket.h +++ b/Libraries/LibCore/CTCPSocket.h @@ -8,7 +8,9 @@ class CTCPServer; class CTCPSocket final : public CSocket { C_OBJECT(CTCPSocket) public: - explicit CTCPSocket(CObject* parent = nullptr); - CTCPSocket(Badge<CTCPServer>, int fd, CObject* parent = nullptr); virtual ~CTCPSocket() override; + +private: + CTCPSocket(int fd, CObject* parent = nullptr); + explicit CTCPSocket(CObject* parent = nullptr); }; diff --git a/Libraries/LibCore/CoreIPCClient.h b/Libraries/LibCore/CoreIPCClient.h index c26e3928fd..f785ecb024 100644 --- a/Libraries/LibCore/CoreIPCClient.h +++ b/Libraries/LibCore/CoreIPCClient.h @@ -47,7 +47,6 @@ namespace Client { template<typename ServerMessage, typename ClientMessage> class Connection : public CObject { - C_OBJECT(Connection) public: Connection(const StringView& address) : m_connection(this) @@ -238,7 +237,6 @@ namespace Client { template<typename Endpoint> class ConnectionNG : public CObject { - C_OBJECT(Connection) public: ConnectionNG(const StringView& address) : m_connection(this) diff --git a/Libraries/LibCore/CoreIPCServer.h b/Libraries/LibCore/CoreIPCServer.h index 69a1681eb1..dd65494e94 100644 --- a/Libraries/LibCore/CoreIPCServer.h +++ b/Libraries/LibCore/CoreIPCServer.h @@ -64,7 +64,6 @@ namespace Server { template<typename ServerMessage, typename ClientMessage> class Connection : public CObject { - C_OBJECT(Connection) public: Connection(CLocalSocket& socket, int client_id) : m_socket(socket) @@ -206,7 +205,6 @@ namespace Server { template<typename Endpoint> class ConnectionNG : public CObject { - C_OBJECT(Connection) public: ConnectionNG(Endpoint& endpoint, CLocalSocket& socket, int client_id) : m_endpoint(endpoint) diff --git a/Libraries/LibGUI/GEventLoop.h b/Libraries/LibGUI/GEventLoop.h index 3358f30207..8171300216 100644 --- a/Libraries/LibGUI/GEventLoop.h +++ b/Libraries/LibGUI/GEventLoop.h @@ -11,6 +11,7 @@ class CNotifier; class GWindow; class GWindowServerConnection : public IPC::Client::Connection<WSAPI_ServerMessage, WSAPI_ClientMessage> { + C_OBJECT(GWindowServerConnection) public: GWindowServerConnection() : Connection("/tmp/wsportal") |