We call the following function on the consumer when the producer closes the connection.
But I noticed that the memory goes up every time the producer reconnects.
Realizing that the context was not freed, I called cuCtxDestroy.
However, a segmentation fault occurs.
Instead of giving g_usleep and then calling it, it works normally.
What is the reason and is there an api that can replace g_usleep?
if (client->stream != EGL_NO_STREAM_KHR)
{
EGLint state = 0;
eglQueryStreamKHR(g_display, client->stream,
EGL_STREAM_STATE_KHR, &state);
// Release the acquired frame if the stream hasn't disconnected yet.
if (state != EGL_STREAM_STATE_DISCONNECTED_KHR)
{
if (!eglStreamConsumerReleaseKHR(g_display,
client->stream))
printf("Release frame failed.\n");
}
if (!eglDestroyStreamKHR(g_display, client->stream))
printf("Couldn't destroy EGL stream\n");
client->stream = EGL_NO_STREAM_KHR;
/* client->fd can only be valid if stream was valid */
if (client->fd != EGL_NO_FILE_DESCRIPTOR_KHR)
{
close(client->fd);
client->fd = EGL_NO_FILE_DESCRIPTOR_KHR;
}
g_usleep(1000 * 1000);
CUresult cure = cuCtxDestroy(client->cuda_consumer.context);
printf("CU RESULT: %d\n", cure);
eglReleaseThread();
}