MCPcopy Create free account
hub / github.com/DeusData/codebase-memory-mcp / runtime_client_exchange

Function runtime_client_exchange

src/daemon/runtime.c:2660–2702  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2658}
2659
2660static bool runtime_client_exchange(cbm_daemon_runtime_client_t *client,
2661 cbm_daemon_runtime_operation_t operation, const void *request,
2662 uint32_t request_length, uint32_t timeout_ms,
2663 uint8_t **response_out, uint32_t expected_response_length) {
2664 *response_out = NULL;
2665 if (timeout_ms == CBM_DAEMON_IPC_WAIT_FOREVER) {
2666 return false;
2667 }
2668 cbm_mutex_lock(&client->exchange_mutex);
2669 cbm_mutex_lock(&client->state_mutex);
2670 if (!client->usable || client->closing || !client->connection) {
2671 cbm_mutex_unlock(&client->state_mutex);
2672 cbm_mutex_unlock(&client->exchange_mutex);
2673 return false;
2674 }
2675 cbm_daemon_ipc_connection_t *connection = client->connection;
2676 client->exchange_active = true;
2677 cbm_mutex_unlock(&client->state_mutex);
2678
2679 cbm_mutex_lock(&client->send_mutex);
2680 bool sent = cbm_daemon_ipc_send_frame(connection, CBM_DAEMON_FRAME_REQUEST, (uint16_t)operation,
2681 request, request_length);
2682 cbm_mutex_unlock(&client->send_mutex);
2683 cbm_daemon_frame_t frame = {0};
2684 uint8_t *payload = NULL;
2685 int received =
2686 sent ? cbm_daemon_ipc_receive_frame(connection, timeout_ms, &frame, &payload) : -1;
2687 bool valid = sent && received == 1 && frame.type == CBM_DAEMON_FRAME_RESPONSE &&
2688 frame.flags == (uint16_t)operation && frame.length == expected_response_length;
2689 cbm_mutex_lock(&client->state_mutex);
2690 client->exchange_active = false;
2691 if (!valid) {
2692 client->usable = false;
2693 }
2694 cbm_mutex_unlock(&client->state_mutex);
2695 if (!valid) {
2696 free(payload);
2697 } else {
2698 *response_out = payload;
2699 }
2700 cbm_mutex_unlock(&client->exchange_mutex);
2701 return valid;
2702}
2703
2704cbm_daemon_subscription_result_t cbm_daemon_runtime_client_job_subscribe(
2705 cbm_daemon_runtime_client_t *client, const char *project_key,

Calls 4

cbm_mutex_lockFunction · 0.85
cbm_mutex_unlockFunction · 0.85

Tested by

no test coverage detected