MCPcopy Create free account
hub / github.com/antirez/ds4 / dist_send_work_result

Function dist_send_work_result

ds4_distributed.c:5828–5892  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5826 break;
5827 }
5828 pthread_mutex_lock(&upstream.write_mu);
5829 dist_send_error(fd, "unsupported distributed worker frame");
5830 pthread_mutex_unlock(&upstream.write_mu);
5831 fprintf(stderr, "ds4: distributed worker: rejected unsupported frame type %u\n", type);
5832 loop_rc = 1;
5833 break;
5834 }
5835
5836 dist_worker_upstream_destroy(&upstream);
5837 return loop_rc;
5838}
5839
5840static int dist_send_work_result(
5841 int fd,
5842 uint64_t request_id,
5843 uint64_t result_hash,
5844 uint32_t status,
5845 uint32_t result_kind,
5846 uint32_t payload_bits,
5847 const ds4_dist_telemetry_fixed *telemetry,
5848 uint32_t telemetry_count,
5849 const void *payload,
5850 uint32_t payload_bytes) {
5851 if (payload_bytes != 0 && !payload) return -1;
5852 if (telemetry_count != 0 && !telemetry) return -1;
5853 uint32_t wire_payload_bytes = payload_bytes;
5854 uint64_t hidden_values = 0;
5855 if (status == 0 && result_kind == DS4_DIST_RESULT_HIDDEN_STATE) {
5856 payload_bits = dist_activation_bits_or_default(payload_bits);
5857 if (!dist_activation_bits_valid(payload_bits) ||
5858 (payload_bytes % (uint32_t)sizeof(float)) != 0)
5859 return -1;
5860 hidden_values = payload_bytes / (uint32_t)sizeof(float);
5861 if (!dist_activation_wire_bytes(payload_bits, hidden_values, &wire_payload_bytes))
5862 return -1;
5863 } else if (status == 0 && result_kind == DS4_DIST_RESULT_LOGITS) {
5864 payload_bits = 32u;
5865 } else {
5866 payload_bits = 0;
5867 }
5868 const uint64_t telemetry_bytes64 =
5869 (uint64_t)telemetry_count * sizeof(ds4_dist_telemetry_fixed);
5870 if (telemetry_bytes64 > UINT32_MAX) return -1;
5871 const uint32_t telemetry_bytes = (uint32_t)telemetry_bytes64;
5872 const uint64_t frame_bytes = sizeof(ds4_dist_result_fixed) +
5873 telemetry_bytes64 +
5874 (uint64_t)wire_payload_bytes;
5875 if (frame_bytes > UINT32_MAX) return -1;
5876
5877 ds4_dist_result_fixed r;
5878 dist_u64_to_halves(request_id, &r.request_hi, &r.request_lo);
5879 dist_u64_to_halves(status == 0 ? result_hash : 0,
5880 &r.result_hash_hi,
5881 &r.result_hash_lo);
5882 r.status = status;
5883 r.result_kind = result_kind;
5884 r.telemetry_count = telemetry_count;
5885 r.telemetry_bytes = telemetry_bytes;

Callers 2

dist_send_work_errorFunction · 0.85

Calls 9

dist_u64_to_halvesFunction · 0.85
dist_result_to_wireFunction · 0.85
dist_write_frame_headerFunction · 0.85
dist_write_fullFunction · 0.85
dist_telemetry_to_wireFunction · 0.85

Tested by

no test coverage detected