[libvirt] [PATCH 2/3] qemu: mark user defined websocket as used

John Ferlan jferlan at redhat.com
Thu Dec 8 20:07:24 UTC 2016



On 11/22/2016 06:09 AM, Nikolay Shirokovskiy wrote:
> We need extra state variable to distinguish between autogenerated
> and user defined cases after auto generation is done.
> ---
>  src/conf/domain_conf.h  |  1 +
>  src/qemu/qemu_process.c | 19 +++++++++++++++++--
>  2 files changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 541b600..9bc4522 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -1468,6 +1468,7 @@ struct _virDomainGraphicsDef {
>              int port;
>              bool portReserved;
>              int websocket;
> +            bool websocketGenerated;
>              bool autoport;
>              char *keymap;
>              virDomainGraphicsAuthDef auth;
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 6aaaa10..1799f33 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -3574,6 +3574,7 @@ qemuProcessVNCAllocatePorts(virQEMUDriverPtr driver,
>          if (virPortAllocatorAcquire(driver->webSocketPorts, &port) < 0)
>              return -1;
>          graphics->data.vnc.websocket = port;
> +        graphics->data.vnc.websocketGenerated = true;
>      }
>  
>      return 0;
> @@ -4065,6 +4066,12 @@ qemuProcessGraphicsReservePorts(virQEMUDriverPtr driver,
>                  return -1;
>              graphics->data.vnc.portReserved = true;
>          }
> +        if (graphics->data.vnc.websocket != -1 &&   /* auto websocket */
> +            graphics->data.vnc.websocket &&         /* no websocket */
> +            virPortAllocatorSetUsed(driver->remotePorts,
> +                                    graphics->data.vnc.websocket,
> +                                    true) < 0)
> +            return -1;
>          break;
>  
>      case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
> @@ -6189,8 +6196,16 @@ void qemuProcessStop(virQEMUDriverPtr driver,
>                                          false);
>                  graphics->data.vnc.portReserved = false;
>              }
> -            virPortAllocatorRelease(driver->webSocketPorts,
> -                                    graphics->data.vnc.websocket);
> +            if (graphics->data.vnc.websocketGenerated) {
> +                virPortAllocatorRelease(driver->webSocketPorts,
> +                                        graphics->data.vnc.websocket);
> +                graphics->data.vnc.websocketGenerated = false;
> +                graphics->data.vnc.websocket = -1;

One more question... Should this be 0 instead of -1?

We set to -1 during Reserve and set the Generated flag indicating that
the user didn't set to -1, but we did.

So when we Release the autogenerated port that we created because -1 was
set, shouldn't we set it back to 0 just like it would have been before
we decided to set to -1 and set the Generated flag?

Avoids other code that then may *print* the websocket as -1...

John

> +            } else if (graphics->data.vnc.websocket) {
> +                virPortAllocatorSetUsed(driver->remotePorts,
> +                                        graphics->data.vnc.websocket,
> +                                        false);
> +            }
>          }
>          if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
>              if (graphics->data.spice.autoport) {
> 




More information about the libvir-list mailing list