Обработчик SIGINT не может установить свойство - PullRequest
1 голос
/ 27 февраля 2020

Я занимаюсь разработкой на платформе Linux. Я реализовал sighandler так, что когда программа завершается нажатием Ctrl + C, она корректно завершается. Мое изящное определение заключается в том, что он должен закрыть порт UART и установить системное свойство. В настоящее время я вижу, что он закрывает UART, но не может установить системное свойство. Ниже приведена выдержка из кода.

#include <signal.h>
static sighandler_t sighandler_old;

int hUart = NULL;
volatile bool flag_stop_capture = false;

int set_uart_ownership_to_my_function(){
  /* Use persistent bit to tell system I have the UART */
  return property_set(PROPERTY_UART_OWNERSHIP, PROPERTY_UART_OWNERSHIP_TO_MY_FUNCTION);
}

int unset_uart_ownership_from_my_function(){
  /* Use persistent bit to tell system PTI has released UART */
  return property_set(PROPERTY_UART_OWNERSHIP, PROPERTY_UART_OWNERSHIP_NOT_IN_USE);
}

void exit_handler(int signum){
  flag_stop_capture = true;
}

int main(){
  /* Register exit_handler as a SIGINT handler and save old handler */
  sighandler_old = signal(SIGINT, exit_handler);

  flag_stop_capture = false;
  set_uart_ownership_to_my_function();
  hUart = open("/dev/ttyS1", O_RDWR | O_NOCTTY);

  while(!flag_stop_capture){
    //do stuff. 
  }

  unset_uart_ownership_from_my_function();
  close(hUart);

  /* Restore the old sighandler */
  signal(SIGINT, sighandler_old);
  return 0;
}

Так что в настоящее время, когда я Ctrl + C, я вижу, что hUart закрывается успешно, но свойство PROPERTY_UART_OWNERSHIP не сбрасывается. Я знаю, что обработчик exit_handler обрабатывается, потому что я вижу закрытие hUart. Почему свойство не сбрасывается? Есть ли проблема с разрешением, когда я Ctrl + C?

...