On 08.12.2016 23:07, John Ferlan wrote:
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.
Not quite. -1 is valid user input. Reserve does not change websocket value.
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?
We autogenerate only because initial value is -1 which means 'autogenerate' by
convention.
So if flag is set we should revert back that is set websocket to -1.
Avoids other code that then may *print* the websocket as -1...
websocket -1 is valid xml telling websocket should be autogenerated.
Nikolay