diff options
author | mrfoxygmfr <mrfoxygmfr@sch9.ru> | 2025-05-21 14:04:35 +0300 |
---|---|---|
committer | mrfoxygmfr <mrfoxygmfr@sch9.ru> | 2025-05-21 14:04:35 +0300 |
commit | 65888e46aa17a21128a4dbf25357c4e843a7f027 (patch) | |
tree | 9748f55b10c8d4f75a22b0441b98286ecf60573a | |
parent | 42557513bc4740b65175b6ca46307ce023c2a628 (diff) |
fix(lib): fix runtime errors
-rw-r--r-- | lib/controller.c | 17 | ||||
-rw-r--r-- | 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)); |