This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

gdb and binutils branch master updated. c3f814a14336b9d395f3abad739592929e2faaa0


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, master has been updated
       via  c3f814a14336b9d395f3abad739592929e2faaa0 (commit)
      from  a3673aac3c2904957579a23f9d61bd3fd13d4d55 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c3f814a14336b9d395f3abad739592929e2faaa0

commit c3f814a14336b9d395f3abad739592929e2faaa0
Author: Pedro Alves <palves@redhat.com>
Date:   Fri Jul 25 10:07:38 2014 +0100

    Fix paginate-*.exp races
    
    Jan pointed out in
    <https://sourceware.org/ml/gdb-patches/2014-07/msg00553.html> that
    these testcases have racy results:
    
      gdb.base/double-prompt-target-event-error.exp
      gdb.base/paginate-after-ctrl-c-running.exp
      gdb.base/paginate-bg-execution.exp
      gdb.base/paginate-execution-startup.exp
      gdb.base/paginate-inferior-exit.exp
    
    This is easily reproducible with "read1" from:
    
      [reproducer for races of expect incomplete reads]
      http://sourceware.org/bugzilla/show_bug.cgi?id=12649
    
    The '-notransfer -re "<return>" { exp_continue }' trick in the current
    tests doesn't actually work.
    
    The issue that led to the -notransfer trick was that
    
      "---Type <return> to continue, or q <return> to quit---"
    
    has two "<return>"s.  If one wants gdb_test_multiple to not hit the
    built-in "<return>" match that results in FAIL, one has to expect the
    pagination prompt in chunks, first up to the first "<return>", then
    again, up to the second.  Something around these lines:
    
      gdb_test_multiple "" $test {
          -re "<return>" {
    	  exp_continue
          }
          -re "to quit ---" {
    	  pass $test
          }
      }
    
    The intent was for -notransfer+exp_continue to make expect fetch more
    input, and rerun the matches against the now potentially fuller
    buffer, and then eventually the -re that includes the full pagination
    prompt regex would match instead (because it's listed higher up, it
    would match first).  But, once that "<return>" -notransfer -re
    matches, it keeps re-matching forever.  It seems like with
    exp_continue, expect immediately retries matching, instead of first
    reading in more data into the buffer, if available.
    
    Fix this like I should have done in the first place.  There's actually
    no good reason for gdb_test_multiple to only match "<return>".  We can
    make gdb_test_multiple expect the whole pagination prompt text
    instead, which is store in the 'pagination_prompt' global (similar to
    'gdb_prompt').  Then a gdb_test_multiple caller that doesn't want the
    default match to trigger, because it wants to see one pagination
    prompt, does simply:
    
      gdb_test_multiple "" $test {
          -re "$pagination_prompt$" {
    	  pass $test
          }
      }
    
    which is just like when we don't want the default $gdb_prompt match
    within gdb_test_multiple to trigger, like:
    
      gdb_test_multiple "" $test {
          -re "$gdb_prompt $" {
    	  pass $test
          }
      }
    
    Tested on x86_64 Fedora 20.  In addition, I've let the racy tests run
    all in parallel in a loop for 30 minutes, and they never failed.
    
    gdb/testsuite/
    2014-07-25  Pedro Alves  <palves@redhat.com>
    
    	* gdb.base/double-prompt-target-event-error.exp
    	(cancel_pagination_in_target_event): Remove '-notransfer <return>'
    	match.
    	(cancel_pagination_in_target_event): Rework double prompt
    	detection.
    	* gdb.base/paginate-after-ctrl-c-running.exp
    	(test_ctrlc_while_target_running_paginates): Remove '-notransfer
    	<return>' match.
    	* gdb.base/paginate-bg-execution.exp
    	(test_bg_execution_pagination_return)
    	(test_bg_execution_pagination_cancel): Remove '-notransfer
    	<return>' matches.
    	* gdb.base/paginate-execution-startup.exp
    	(test_fg_execution_pagination_return)
    	(test_fg_execution_pagination_cancel): Remove '-notransfer
    	<return>' matches.
    	* gdb.base/paginate-inferior-exit.exp
    	(test_paginate_inferior_exited): Remove '-notransfer <return>'
    	match.
    	* lib/gdb-utils.exp (string_to_regexp): Move here from lib/gdb.exp.
    	* lib/gdb.exp (pagination_prompt): Run text through
    	string_to_regexp.
    	(gdb_test_multiple): Match $pagination_prompt instead of
    	"<return>".
    	(string_to_regexp): Move to lib/gdb-utils.exp.

-----------------------------------------------------------------------

Summary of changes:
 gdb/testsuite/ChangeLog                            |   28 ++++++++++++++++++++
 .../gdb.base/double-prompt-target-event-error.exp  |   26 +++++++++++-------
 .../gdb.base/paginate-after-ctrl-c-running.exp     |    4 ---
 gdb/testsuite/gdb.base/paginate-bg-execution.exp   |    9 ------
 .../gdb.base/paginate-execution-startup.exp        |    8 -----
 gdb/testsuite/gdb.base/paginate-inferior-exit.exp  |    4 ---
 gdb/testsuite/lib/gdb-utils.exp                    |    9 ++++++
 gdb/testsuite/lib/gdb.exp                          |   14 ++--------
 8 files changed, 56 insertions(+), 46 deletions(-)


hooks/post-receive
-- 
gdb and binutils


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]