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

Function runtime_client_exchange

src/daemon/runtime.c:2688–2730  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2686}
2687
2688static bool runtime_client_exchange(cbm_daemon_runtime_client_t *client,
2689 cbm_daemon_runtime_operation_t operation, const void *request,
2690 uint32_t request_length, uint32_t timeout_ms,
2691 uint8_t **response_out, uint32_t expected_response_length) {
2692 *response_out = NULL;
2693 if (timeout_ms == CBM_DAEMON_IPC_WAIT_FOREVER) {
2694 return false;
2695 }
2696 cbm_mutex_lock(&client->exchange_mutex);
2697 cbm_mutex_lock(&client->state_mutex);
2698 if (!client->usable || client->closing || !client->connection) {
2699 cbm_mutex_unlock(&client->state_mutex);
2700 cbm_mutex_unlock(&client->exchange_mutex);
2701 return false;
2702 }
2703 cbm_daemon_ipc_connection_t *connection = client->connection;
2704 client->exchange_active = true;
2705 cbm_mutex_unlock(&client->state_mutex);
2706
2707 cbm_mutex_lock(&client->send_mutex);
2708 bool sent = cbm_daemon_ipc_send_frame(connection, CBM_DAEMON_FRAME_REQUEST, (uint16_t)operation,
2709 request, request_length);
2710 cbm_mutex_unlock(&client->send_mutex);
2711 cbm_daemon_frame_t frame = {0};
2712 uint8_t *payload = NULL;
2713 int received =
2714 sent ? cbm_daemon_ipc_receive_frame(connection, timeout_ms, &frame, &payload) : -1;
2715 bool valid = sent && received == 1 && frame.type == CBM_DAEMON_FRAME_RESPONSE &&
2716 frame.flags == (uint16_t)operation && frame.length == expected_response_length;
2717 cbm_mutex_lock(&client->state_mutex);
2718 client->exchange_active = false;
2719 if (!valid) {
2720 client->usable = false;
2721 }
2722 cbm_mutex_unlock(&client->state_mutex);
2723 if (!valid) {
2724 free(payload);
2725 } else {
2726 *response_out = payload;
2727 }
2728 cbm_mutex_unlock(&client->exchange_mutex);
2729 return valid;
2730}
2731
2732cbm_daemon_subscription_result_t cbm_daemon_runtime_client_job_subscribe(
2733 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