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 <pet...@redhat.com> > --- > 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. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|