HI, everyone:

My target  deal with network hotplug use virDomainDetachDeviceFlags. Because 
when the API return ,the network maybe doesn’t remove from my vm guest os.

So I use virConnectDomainEventRegisterAny  to register an event ID: 
VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED ,

 my process as follow:

cb_para->call_id=virConnectDomainEventRegisterAny(cb_para->conn,cb_para->dom,VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED,
 VIR_DOMAIN_EVENT_CALLBACK(vnf_control_del_network_cb), cb_para, 
vnf_control_del_network_cb_free); 



    flags |= VIR_DOMAIN_AFFECT_CONFIG;
    if (virDomainIsActive(dom) == 1) {
        flags |= VIR_DOMAIN_AFFECT_LIVE;
    }

    ret = virDomainDetachDeviceFlags(dom, xml, flags);


 

above code write in thread loop ,then in the same loop :

 

       while (1) {

              mission = vnf_mission_queue_get(task);

              if (mission == NULL) {

                     sleep(1);

                     continue;

              } 

              vnf_op_process(&mission->info); // this will deal with network 
hotplug,will call virConnectDomainEventRegisterAny  then call  
virDomainDetachDeviceFlags

              if (mission) {

                     vnf_mission_free(mission);

              } 

              if(virEventRunDefaultImpl() < 0) { // at here process  the 
registered callback for event-registered

                    printf();....


              }     

       }

My problem is: some time  , the virEventRunDefaultImpl can trigger the 
vnf_control_del_network_cb  callback ,but some time  there is nothing ,as if 
the VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED has lost.
what cause the Unpredictable behavior ?  what is a correct use for 
virConnectDomainEventRegisterAny ?



if can't trigger the vnf_control_del_network_cb callback , the memory :cb_para 
will mem-leak,

so in order to deal the execpt ,i  register a timer to process the 
VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED timeout

cb_para->timer_id = virEventAddTimeout(cb_para->time_out, 
vnf_control_del_network_timeout_cb, cb_para, vnf_control_del_network_cb_free);
thought use the timer ,can i avoid the cb_para mem-leak, but fail to achive  
hotplug network .

Reply via email to