LINUX.ORG.RU

подвисание на wait_event_interruptible


0

1

Объясните, плиз, причину подвисания на функции wait_event_interruptible().

Имею след код


module_param( flag, int, 0444 );
MODULE_PARM_DESC( flag, "flag");

#define IS 1
#define NO 0

struct task_struct * usbsnd_thread;
wait_queue_head_t    tx_wq;
int data = 0x0;
unsigned int flag = NO;

int usbsnd_task( void * data )
{

   while( 1 )
   {
      wait_event_interruptible( tx_wq , ( kthread_should_stop() || flag ) );
      if( kthread_should_stop() ) break;
      mdelay( 1000 ); // 1 sec
      //printk( KERN_INFO "thread active ");
   }
   
   return 0;
}


static int __init simple_init(void)
{
   init_waitqueue_head( & tx_wq );
   
   usbsnd_thread = kthread_run( & usbsnd_task , ( void * ) data , "usbsnd" );
   if( IS_ERR( usbsnd_thread ))
   {
      printk( KERN_ERR " Can't create and run thread !!!");
   }
   
   return 0;
}

Когда поток просыпается система зависает - не работает клавиатура и т.п.. Созданный поток работает...

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.