From 65888e46aa17a21128a4dbf25357c4e843a7f027 Mon Sep 17 00:00:00 2001
From: mrfoxygmfr <mrfoxygmfr@sch9.ru>
Date: Wed, 21 May 2025 14:04:35 +0300
Subject: fix(lib): fix runtime errors

---
 lib/controller.c | 17 +++++++----------
 lib/worker.c     | 12 ++++++------
 2 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/lib/controller.c b/lib/controller.c
index ce850c5..b28f0dd 100644
--- a/lib/controller.c
+++ b/lib/controller.c
@@ -116,11 +116,12 @@ void* controller_conn_thread(void* args) {
             }
 
             memcpy(buf, &task->id, sizeof(task->id));
-            memcpy(buf + sizeof(task->id), task->task, task->task_size);
+            memcpy(buf + 16, task->task, task->task_size);
 
-            conn_write(conn->conn, buf, sizeof(task->id) + task->task_size);
+            conn_write(conn->conn, buf, 16 + task->task_size);
+            free(data);
         } else if (data[0] == REQUEST_TYPE_PUT_RESULT) {
-            int id = *((int*) (data + 1));
+            int id = *((int*) (data + 4));
             if (pthread_mutex_lock(&cntr->mutex) != 0) {
                 fprintf(stderr, "[controller_thread] Unable to call pthread_mutex_lock\n");
                 exit(EXIT_FAILURE);
@@ -131,9 +132,8 @@ void* controller_conn_thread(void* args) {
                 if (cntr->tasks[i].id == id) {
                     task = &cntr->tasks[i];
                     task->status = TASK_STATUS_FINISHED;
-                    task->response = data + 5;
-                    task->response_size = sz - 5;
-                    printf("finished\n");
+                    task->response = data + 16;
+                    task->response_size = sz - 16;
                     break;
                 }
             }
@@ -152,8 +152,6 @@ void* controller_conn_thread(void* args) {
         } else {
             conn_close(conn->conn);
         }
-
-        free(data);
     }
 
     conn_close(conn->conn);
@@ -263,11 +261,10 @@ int controller_yield_task(const char* data, size_t size) {
 
     controller_task_t* task = &cntr->tasks[cntr->tasks_len];
 
-    task->id = cntr->tasks_len + 1;
+    task->id = ++cntr->tasks_len;
     task->task = data;
     task->task_size = size;
     task->status = TASK_STATUS_QUEUED;
-    cntr->tasks_len++;
 
     if (pthread_mutex_unlock(&cntr->mutex) != 0) {
         fprintf(stderr, "[yield_task] Unable to call pthread_mutex_unlock\n");
diff --git a/lib/worker.c b/lib/worker.c
index fa399f0..9891310 100644
--- a/lib/worker.c
+++ b/lib/worker.c
@@ -67,18 +67,18 @@ void* worker_proc_thread(void* args) {
         char* resp;
         size_t resp_size;
 
-        wrk->func(task + 4, size - 4, &resp, &resp_size);
-        memcpy(worker_buf + 1, task, 4);
-        free(task);
-
+        wrk->func(task + 16, size - 16, &resp, &resp_size);
         if (pthread_mutex_lock(&wrk->mutex) != 0) {
             fprintf(stderr, "[proc_thread] Unable to call pthread_mutex_lock\n");
             exit(EXIT_FAILURE);
         }
 
+        memcpy(worker_buf + 4, task, 4);
+        free(task);
+
         worker_buf[0] = REQUEST_TYPE_PUT_RESULT;
-        memcpy(worker_buf + 5, resp, resp_size);
-        conn_write(wrk->conn, worker_buf, resp_size + 5);
+        memcpy(worker_buf + 16, resp, resp_size);
+        conn_write(wrk->conn, worker_buf, resp_size + 16);
         free(resp);
 
         free(conn_read(wrk->conn, &size));
-- 
cgit mrf-deployment