qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 11/15] qio: non-default context for TLS hands


From: Peter Xu
Subject: Re: [Qemu-devel] [PATCH v2 11/15] qio: non-default context for TLS handshake
Date: Fri, 2 Mar 2018 14:18:47 +0800
User-agent: Mutt/1.9.1 (2017-09-22)

On Thu, Mar 01, 2018 at 03:50:01PM +0000, Daniel P. Berrangé wrote:
> On Thu, Mar 01, 2018 at 04:44:34PM +0800, Peter Xu wrote:
> > qio_channel_tls_handshake_full() is introduced to allow the TLS to be
> > run on a non-default context.  Still, no functional change.
> > 
> > Signed-off-by: Peter Xu <address@hidden>
> > ---
> >  include/io/channel-tls.h | 17 ++++++++++++++++
> >  io/channel-tls.c         | 51 
> > +++++++++++++++++++++++++++++++++++-------------
> >  2 files changed, 54 insertions(+), 14 deletions(-)
> > 
> 
> >  static void qio_channel_tls_handshake_task(QIOChannelTLS *ioc,
> > -                                           QIOTask *task)
> > +                                           QIOTask *task,
> > +                                           GMainContext *context)
> >  {
> >      Error *err = NULL;
> >      QCryptoTLSSessionHandshakeStatus status;
> > @@ -171,6 +177,11 @@ static void 
> > qio_channel_tls_handshake_task(QIOChannelTLS *ioc,
> >          qio_task_complete(task);
> >      } else {
> >          GIOCondition condition;
> > +        QIOChannelTLSData *data = g_new0(typeof(*data), 1);
> > +
> > +        data->task = task;
> > +        data->context = context;
> 
> The 'context' reference is only valid for as long as the caller
> exists. So you need to acquire a reference on 'context' here....
> 
> 
> > @@ -191,20 +203,23 @@ static gboolean 
> > qio_channel_tls_handshake_io(QIOChannel *ioc,
> >                                               GIOCondition condition,
> >                                               gpointer user_data)
> >  {
> > -    QIOTask *task = user_data;
> > +    QIOChannelTLSData *data = user_data;
> > +    QIOTask *task = data->task;
> > +    GMainContext *context = data->context;
> >      QIOChannelTLS *tioc = QIO_CHANNEL_TLS(
> >          qio_task_get_source(task));
> >  
> > -    qio_channel_tls_handshake_task(
> > -       tioc, task);
> 
> > +    g_free(data);
> > +    qio_channel_tls_handshake_task(tioc, task, context);
> 
> And release the reference on context here.

Yeah, fixed both.  Thanks,

-- 
Peter Xu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]