Цикл while с time.sleep () вызывает "двойное освобождение или повреждение" - PullRequest
0 голосов
/ 24 сентября 2019

Я пишу обертку для C-API с Cython.Цель состоит в том, чтобы создать client, который подключается к mediator серверу, используя API.Клиент обрабатывает аудиофайл, разбивает его на пакеты и отправляет их посреднику.Незадолго до отправки аудиопакетов он запускает дополнительный поток для приема входящих пакетов от посредника.Метод API для получения пакетов от посредника вызывается с освобожденным gil no gil.Тем не менее, после окончания отправки всех исходящих пакетов клиент должен ждать.Он все еще получает пакеты от посредника и должен ждать сообщения done на стороне посредника.Только после этого ему разрешается отключиться от посредника.

DO STUFF
...
t = threading.Thread(target=_recv_thread, args=(user_data,))
t.start()
...
send_audio_packets()
while True:
    if user_data.proceed is 1:
        print("Still waiting")
        time.sleep(2)
    else:
        disconnect()

Для отключения user_data.proceed необходимо установить значение 0 после получения последнего пакета.Проблема, с которой я сейчас сталкиваюсь, заключается в том, что time.sleep() вызывает double free or corruption (fasttop) Aborted.Возможно ли, что эта ошибка связана с другим «потоком»?

...