Skip to content

Commit ec80c71

Browse files
committed
fix: bug with queue not initializing
1 parent e903f8a commit ec80c71

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

source/means-to-an-end/client-session.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ void clients_session_init(struct clients_session **pca, int client_id)
2121
asset_prices_init(&(*pca)->asset, 16);
2222
assert((*pca)->asset != NULL);
2323

24-
queue_init(&((*pca)->recv_qu), 512);
24+
(*pca)->recv_qu = NULL;
25+
queue_init(&(*pca)->recv_qu, 512);
2526
assert((*pca)->recv_qu != NULL);
2627

2728
(*pca)->next = NULL;

source/means-to-an-end/main.c

+5-6
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ int main()
7676
struct epoll_ctl_info epci = {epollfd, 0, 0};
7777
struct queue *rcqu = NULL, *sdqu = NULL;
7878
struct clients_session *ca = NULL;
79-
queue_init(&rcqu, QUEUE_CAPACITY);
8079
queue_init(&sdqu, QUEUE_CAPACITY);
8180

8281
for (;;) {
@@ -101,7 +100,9 @@ int main()
101100
}
102101

103102
// Receive all the data into the queue
104-
res = recv_request(fd, rcqu);
103+
client_found = clients_session_find(&ca, fd);
104+
assert(client_found);
105+
res = recv_request(fd, ca->recv_qu);
105106
log_trace(
106107
"main epoll loop: handling POLLIN event on fd '%d' with res: '%d'",
107108
fd,
@@ -121,7 +122,7 @@ int main()
121122

122123
// Peek at the data to check if we have at least one complete request
123124
complete_req = false;
124-
size = queue_peek(rcqu, &data);
125+
size = queue_peek(ca->recv_qu, &data);
125126
if ((size > 0) && (size % MESSAGE_SIZE == 0)) {
126127
complete_req = true;
127128
log_trace("main epoll loop: complete_req = '%d'",
@@ -130,14 +131,12 @@ int main()
130131

131132
// If we do, process itl
132133
if (complete_req) {
133-
size = queue_pop_no_copy(rcqu, &data);
134+
size = queue_pop_no_copy(ca->recv_qu, &data);
134135
log_trace(
135136
"main epoll loop: raw request: fd: '%d', size: '%d'",
136137
fd,
137138
size);
138139

139-
client_found = clients_session_find(&ca, fd);
140-
assert(client_found);
141140
message_parse(ca->asset, sdqu, data, size);
142141
sdsize = queue_pop_no_copy(sdqu, &sddata);
143142
if (sdsize > 0) {

test/means-to-an-end/messages-prices-test.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <catch2/catch.hpp>
1919
#include "means-to-an-end/asset-prices.h"
2020
#include "means-to-an-end/client-session.h"
21+
#include "utils/queue.h"
2122

2223
TEST_CASE("prices_init initializes prices structure correctly", "[prices]")
2324
{
@@ -188,6 +189,23 @@ TEST_CASE("clients_session operations", "[clients_session]") {
188189
clients_session_free_all(&ca);
189190
}
190191

192+
SECTION("Queue Initialization") {
193+
REQUIRE(ca == nullptr);
194+
195+
clients_session_init(&ca, 1);
196+
REQUIRE(ca != nullptr);
197+
198+
clients_session_add(&ca, 2);
199+
clients_session_add(&ca, 3);
200+
201+
// Check if we can find all added clients
202+
REQUIRE(ca->recv_qu != NULL);
203+
REQUIRE(ca->recv_qu->capacity == 512);
204+
REQUIRE(ca->recv_qu->size == 0);
205+
206+
clients_session_free_all(&ca);
207+
}
208+
191209
SECTION("Finding clients") {
192210
create_test_list(&ca, 5);
193211

0 commit comments

Comments
 (0)