diff --git a/src/mcp/mcp.c b/src/mcp/mcp.c index bdfdae8..cdcf2bb 100644 --- a/src/mcp/mcp.c +++ b/src/mcp/mcp.c @@ -2389,16 +2389,21 @@ int cbm_mcp_server_run(cbm_mcp_server_t *srv, FILE *in, FILE *out) { continue; } #else - struct pollfd pfd = {.fd = fd, .events = POLLIN}; - int pr = poll(&pfd, 1, STORE_IDLE_TIMEOUT_S * 1000); - - if (pr < 0) { - break; /* error or signal */ - } - if (pr == 0) { - /* Timeout — evict idle store to free resources */ - cbm_mcp_server_evict_idle(srv, STORE_IDLE_TIMEOUT_S); - continue; +#ifdef __GLIBC__ + int has_buffered = (in->_IO_read_ptr < in->_IO_read_end); +#else + /* macOS / BSD: use __srget-style check. + * fp->_r is the count of unread bytes in the buffer. */ + int has_buffered = (in->_r > 0); +#endif + if (!has_buffered) { + struct pollfd pfd = {.fd = fd, .events = POLLIN}; + int pr = poll(&pfd, 1, STORE_IDLE_TIMEOUT_S * 1000); + if (pr < 0) break; + if (pr == 0) { + cbm_mcp_server_evict_idle(srv, STORE_IDLE_TIMEOUT_S); + continue; + } } #endif