All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ed Bartosh <ed.bartosh@linux.intel.com>
To: "Aníbal Limón" <anibal.limon@linux.intel.com>
Cc: benjamin.esquivel@intel.com, brian.avery@intel.com,
	bitbake-devel@lists.openembedded.org
Subject: Re: [PATCH] bb.event: fix infinite loop on print_ui_queue
Date: Fri, 14 Oct 2016 11:44:08 +0300	[thread overview]
Message-ID: <20161014084408.GA392@linux.intel.com> (raw)
In-Reply-To: <1476400294-17333-1-git-send-email-anibal.limon@linux.intel.com>

On Thu, Oct 13, 2016 at 06:11:34PM -0500, Aníbal Limón wrote:
> If bitbake ends before _uiready and bb.event.LogHandler was add
> to the bitbake logger it causes an infinite loop when logging
> something.
> 
> The scenario is print_ui_queue is called at exit and executes
> the log handlers [2] one of them is bb.event.LogHandler this handler
> appends the same entry to ui_queue causing the inifine loop [3].
> 
> In order to fix we need to keep track of events already handled to
> avoid the infinite loop.
> 
> [YOCTO #10399]
> 
> [1] https://bugzilla.yoctoproject.org/show_bug.cgi?id=10399#c0
> [2] http://git.openembedded.org/bitbake/tree/lib/bb/event.py?id=41d9cd41d40b04746c82b4a940dca47df02514fc#n156
> [3]
> http://git.openembedded.org/bitbake/tree/lib/bb/event.py?id=41d9cd41d40b04746c82b4a940dca47df02514fc#n164
> 
> Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
> ---
>  lib/bb/event.py | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/lib/bb/event.py b/lib/bb/event.py
> index c5a5f94..8464e06 100644
> --- a/lib/bb/event.py
> +++ b/lib/bb/event.py
> @@ -139,7 +139,11 @@ def print_ui_queue():
>  
>          # First check to see if we have any proper messages
>          msgprint = False
> +        events_handled = []
>          for event in ui_queue:
> +            if event in events_handled:
> +                continue
> +
>              if isinstance(event, logging.LogRecord):
>                  if event.levelno > logging.DEBUG:
>                      if event.levelno >= logging.WARNING:
> @@ -148,14 +152,20 @@ def print_ui_queue():
>                          logger.addHandler(stdout)
>                      logger.handle(event)
>                      msgprint = True
> +            events_handled.append(event)
>          if msgprint:
>              return
>  
>          # Nope, so just print all of the messages we have (including debug messages)
>          logger.addHandler(stdout)
> +        events_handled = []
>          for event in ui_queue:
> +            if event in events_handled:
> +                continue
> +
>              if isinstance(event, logging.LogRecord):
>                  logger.handle(event)
> +            events_handled.append(event)
>  
>  def fire_ui_handlers(event, d):
>      global _thread_lock

Would using full slice of ui_queue work the same way?

@@ -139,7 +139,7 @@ def print_ui_queue():

         # First check to see if we have any proper messages
         msgprint = False
-        for event in ui_queue:
+        for event in ui_queue[:]:
             if isinstance(event, logging.LogRecord):
                 if event.levelno > logging.DEBUG:
                     if event.levelno >= logging.WARNING:


--
Regards,
Ed


  reply	other threads:[~2016-10-14  9:09 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-13 23:11 [PATCH] bb.event: fix infinite loop on print_ui_queue Aníbal Limón
2016-10-14  8:44 ` Ed Bartosh [this message]
2016-10-14 15:44   ` Aníbal Limón
2016-10-15 12:30     ` Richard Purdie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161014084408.GA392@linux.intel.com \
    --to=ed.bartosh@linux.intel.com \
    --cc=anibal.limon@linux.intel.com \
    --cc=benjamin.esquivel@intel.com \
    --cc=bitbake-devel@lists.openembedded.org \
    --cc=brian.avery@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.