summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries')
-rw-r--r--Libraries/LibCore/CHttpJob.cpp2
-rw-r--r--Libraries/LibCore/CHttpJob.h2
-rw-r--r--Libraries/LibCore/CObject.h14
-rw-r--r--Libraries/LibCore/CTCPServer.cpp4
-rw-r--r--Libraries/LibCore/CTCPServer.h2
-rw-r--r--Libraries/LibCore/CTCPSocket.cpp2
-rw-r--r--Libraries/LibCore/CTCPSocket.h6
-rw-r--r--Libraries/LibCore/CoreIPCClient.h2
-rw-r--r--Libraries/LibCore/CoreIPCServer.h2
-rw-r--r--Libraries/LibGUI/GEventLoop.h1
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")