[libvirt] [PATCH 1/7] Add @seconds vaiable to qemuAgentSend()

Martin Kletzander mkletzan at redhat.com
Thu Aug 16 12:58:34 UTC 2012


On 08/15/2012 03:36 AM, MATSUDA Daiki wrote:
> 
>  Add @seconds variable to qemuAgentSend().
>  When @tiemout is true, @seconds controls how long to wait for a response
>  (if @seconds is VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT, default to
>  QEMU_AGENT_WAIT_TIME).
>  If @timeout is false, @seconds is ignored.
> 
> 
> Signed-off-by: MATSUDA Daiki <matsudadik at intellilink.co.jp>
> ---
>  include/libvirt/libvirt-qemu.h |    6 ++++++
>  src/qemu/qemu_agent.c          |   30 ++++++++++++++++++++----------
>  2 files changed, 26 insertions(+), 10 deletions(-)
> 
> diff --git a/include/libvirt/libvirt-qemu.h b/include/libvirt/libvirt-qemu.h
> index a37f897..013ed5a 100644
> --- a/include/libvirt/libvirt-qemu.h
> +++ b/include/libvirt/libvirt-qemu.h
> @@ -44,6 +44,12 @@ virDomainPtr virDomainQemuAttach(virConnectPtr domain,
>                                   unsigned int pid_value,
>                                   unsigned int flags);
>  
> +typedef enum {
> +    VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK = -2,

Correct me if I'm wrong, but isn't this the same as setting timeout to
false?

> +    VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT = -1,
> +    VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT = 0,
> +} virDomainQemuAgentCommandTimeoutValues;
> +
>  # ifdef __cplusplus
>  }
>  # endif
> diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
> index 15af758..26c2726 100644
> --- a/src/qemu/qemu_agent.c
> +++ b/src/qemu/qemu_agent.c
> @@ -837,6 +837,8 @@ void qemuAgentClose(qemuAgentPtr mon)
>   * @mon: Monitor
>   * @msg: Message
>   * @timeout: use timeout?
> + * @seconds: timeout seconds. if VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT and
> + *           @timeout is true, use default value.

If my previous assumption is correct, than the timeout parameter can be
completely thrown away.

>   *
>   * Send @msg to agent @mon.
>   * Wait max QEMU_AGENT_WAIT_TIME for agent
> @@ -848,7 +850,8 @@ void qemuAgentClose(qemuAgentPtr mon)
>   */
>  static int qemuAgentSend(qemuAgentPtr mon,
>                           qemuAgentMessagePtr msg,
> -                         bool timeout)
> +                         bool timeout,
> +                         int seconds)
>  {
>      int ret = -1;
>      unsigned long long now, then = 0;
> @@ -864,7 +867,8 @@ static int qemuAgentSend(qemuAgentPtr mon,
>      if (timeout) {
>          if (virTimeMillisNow(&now) < 0)
>              return -1;
> -        then = now + QEMU_AGENT_WAIT_TIME;
> +        then = now + (seconds == VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT ?
> +                      QEMU_AGENT_WAIT_TIME : seconds * 1000ull);
>      }

Also if seconds == VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK, then this causes
'then' to be smaller than now. I'm not sure what that would do with
pthread_cond_timedwait, but that's definitely not wanted behavior.

Martin




More information about the libvir-list mailing list