Hi Gary,
ack, code review only/Thanks HansN
On 2019-06-20 04:13, Gary Lee wrote:
> In handle_event_in_failover_state(), we iterate through
> queue_evt in a while loop, but process_event() can insert
> items into the queue inside the loop, and we may end
> up never exiting the while loop.
> ---
> src/amf/amfd/main.cc | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/src/amf/amfd/main.cc b/src/amf/amfd/main.cc
> index 50daa59..e3d0957 100644
> --- a/src/amf/amfd/main.cc
> +++ b/src/amf/amfd/main.cc
> @@ -406,12 +406,18 @@ static void handle_event_in_failover_state(AVD_EVT
> *evt) {
>
> /* Dequeue, all the messages from the queue
> and process them now */
> -
> - while (!cb->evt_queue.empty()) {
> + auto size_before_loop = cb->evt_queue.size();
> + std::queue<AVD_EVT_QUEUE *>::size_type count = 0;
> + while (count < size_before_loop) {
> + // note: process_event() may insert items into
> + // the queue, so terminate loop when we have
> + // processed all the original elements
> + // to avoid infinite loop
> AVD_EVT_QUEUE *queue_evt = cb->evt_queue.front();
> cb->evt_queue.pop();
> process_event(cb, queue_evt->evt);
> delete queue_evt;
> + ++count;
> }
>
> /* Walk through all the nodes to check if any of the nodes state is
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel