void log_display_headstart() { int64_t mid = NUM_HEADSTARTS/2; put_string("\nHeadstarts:\n"); for (int i = 0; i < NUM_HEADSTARTS; i++) { put_int64(i-mid); put_string(": "); put_uint64(global_log.headstarts[i]); put_string("\n"); } }
static void sendfile_drv_ready_output(ErlDrvData handle, ErlDrvEvent ev) { Desc* d = (Desc*)handle; ssize_t result; off_t cur_offset; Transfer* xfer; SocketFd* sfd = (SocketFd*)&ev; xfer = (Transfer*)hashtable_search(d->xfer_table, sfd->hashkey); if (xfer == NULL) { /* fatal error, something is very wrong */ driver_failure_atom(d->port, "socket_fd_not_found"); return; } cur_offset = xfer->offset; result = sendfile_call(sfd->socket_fd, xfer->file_fd, &xfer->offset, xfer->count); if (result < 0 && (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINPROGRESS || errno == EALREADY)) { if (xfer->offset != cur_offset) { off_t written = xfer->offset - cur_offset; xfer->count -= written; xfer->total += written; } } else { int save_errno = errno; ErlDrvSizeT out_buflen; char buf[36]; Buffer b; b.buffer = buf; memset(buf, 0, sizeof buf); #ifdef ERL_DRV_WRITE driver_select(d->port, ev, ERL_DRV_WRITE, 0); #else driver_select(d->port, ev, DO_WRITE, 0); #endif close(xfer->file_fd); if (result < 0) { out_buflen = set_error_buffer(&b, sfd->socket_fd, save_errno); } else { uint64_t total = xfer->total + result; put_int64(total, &(b.result->count.count)); put_int32(sfd->socket_fd, &(b.result->out_fd)); b.result->success = 1; b.result->errno_string[0] = '\0'; out_buflen = sizeof(*b.result); } xfer->file_fd = -1; xfer->offset = xfer->count = xfer->total = 0; driver_output(d->port, buf, out_buflen); } }