All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Yu, DapengX" <dapengx.yu@intel.com>
To: "Li, Xiaoyun" <xiaoyun.li@intel.com>,
	"Xing, Beilei" <beilei.xing@intel.com>,
	"Lu, Wenzhuo" <wenzhuo.lu@intel.com>,
	"Iremonger, Bernard" <bernard.iremonger@intel.com>,
	"stephen@networkplumber.org" <stephen@networkplumber.org>
Cc: "dev@dpdk.org" <dev@dpdk.org>, "stable@dpdk.org" <stable@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v2] app/testpmd: avoid exit without terminal restore
Date: Tue, 26 Jan 2021 07:13:14 +0000	[thread overview]
Message-ID: <2028de798dcd43bda6a502518cf6e6c4@intel.com> (raw)
In-Reply-To: <CY4PR11MB175014EA4024C26925443AD599BC9@CY4PR11MB1750.namprd11.prod.outlook.com>

Hi Xiaoyun,

For this situation: registering prompt_exit succeed,  and user type "quit" command to exit testpmd.

If the second call to cmdline_stdin_exit is not excluded from the code conditionally, the cmdline_stdin_exit will be called twice;

1. the first time: in prompt()
    #0  cmdline_stdin_exit (cl=0x3638470) at ../lib/librte_cmdline/cmdline_socket.c:56
    #1  0x000000000051fb62 in prompt () at ../app/test-pmd/cmdline.c:17134
    #2  0x00000000005a4d0f in main (argc=2, argv=0x7fffffffda70) at ../app/test-pmd/testpmd.c:3849
2. the second time: in exit() .
    #0  cmdline_stdin_exit (cl=0x3638470) at ../lib/librte_cmdline/cmdline_socket.c:56
    #1  0x000000000051fb95 in prompt_exit () at ../app/test-pmd/cmdline.c:17142
    #2  0x00007ffff630fe9c in __run_exit_handlers () from /lib64/libc.so.6
    #3  0x00007ffff630ffd0 in exit () from /lib64/libc.so.6
    #4  0x00007ffff62f96aa in __libc_start_main () from /lib64/libc.so.6
    #5  0x00000000004ead2e in _start () 

-----Original Message-----
From: Li, Xiaoyun 
Sent: Tuesday, January 26, 2021 2:33 PM
To: Yu, DapengX <dapengx.yu@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; stephen@networkplumber.org
Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org
Subject: RE: [PATCH v2] app/testpmd: avoid exit without terminal restore

Hi

> -----Original Message-----
> From: dapengx.yu@intel.com <dapengx.yu@intel.com>
> Sent: Monday, January 25, 2021 11:30
> To: Xing, Beilei <beilei.xing@intel.com>; Li, Xiaoyun 
> <xiaoyun.li@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, 
> Bernard <bernard.iremonger@intel.com>; stephen@networkplumber.org
> Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org
> Subject: [PATCH v2] app/testpmd: avoid exit without terminal restore
> 
> From: Dapeng Yu <dapengx.yu@intel.com>
> 
> In interactive mode, if testpmd exit by calling rte_exit without 
> restore terminal attributes, terminal will not echo keyboard input.
> 
> register a function with atexit() in prompt(), when exit() in
> rte_exit() is called, the registered function restores terminal attributes.
> 
> Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional 
> configuration")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Dapeng Yu <dapengx.yu@intel.com>
> ---
>  app/test-pmd/cmdline.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 
> 89034c8b7..f7e18ba3d 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -17116,6 +17116,7 @@ cmdline_read_from_file(const char *filename) 
> void
>  prompt(void)
>  {
> +int ret;
>  /* initialize non-constant commands */  cmd_set_fwd_mode_init();  
> cmd_set_fwd_retry_mode_init(); @@ -17123,15 +17124,23 @@ prompt(void)  
> testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> ");  if (testpmd_cl 
> == NULL)  return;
> +
> +ret = atexit(prompt_exit);
> +if (ret != 0)
> +printf("Cannot set exit function for cmdline\n");
> +
>  cmdline_interact(testpmd_cl);
> -cmdline_stdin_exit(testpmd_cl);
> +if (ret != 0)

Why do you need to check ret here?
Even if registers prompt_exit failed, when users type "quit" and then break from cmdline_interact(), cmdline_stdin_exit() should be called to restore terminal settings.

> +cmdline_stdin_exit(testpmd_cl);
>  }
> 
>  void
>  prompt_exit(void)
>  {
> -if (testpmd_cl != NULL)
> +if (testpmd_cl != NULL) {
>  cmdline_quit(testpmd_cl);
> +cmdline_stdin_exit(testpmd_cl);
> +}
>  }
> 
>  static void
> --
> 2.27.0



  reply	other threads:[~2021-01-26  7:13 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-24  3:57 [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release dapengx.yu
2020-12-25  3:03 ` Stephen Hemminger
2020-12-25  5:09   ` Yu, DapengX
2021-01-15  3:28     ` Yu, DapengX
2021-01-15  5:50       ` Xing, Beilei
2021-01-15  6:05         ` Yu, DapengX
2021-01-15  9:21         ` Li, Xiaoyun
2021-01-18 11:47           ` Yu, DapengX
2021-01-25  3:29 ` [dpdk-dev] [PATCH v2] app/testpmd: avoid exit without terminal restore dapengx.yu
2021-01-26  6:33   ` Li, Xiaoyun
2021-01-26  7:13     ` Yu, DapengX [this message]
2021-01-26  7:44     ` Yu, DapengX
2021-01-26  8:24       ` Li, Xiaoyun
2021-01-29 10:46         ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit

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=2028de798dcd43bda6a502518cf6e6c4@intel.com \
    --to=dapengx.yu@intel.com \
    --cc=beilei.xing@intel.com \
    --cc=bernard.iremonger@intel.com \
    --cc=dev@dpdk.org \
    --cc=stable@dpdk.org \
    --cc=stephen@networkplumber.org \
    --cc=wenzhuo.lu@intel.com \
    --cc=xiaoyun.li@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.