@@ -417,8 +417,9 @@ static void tcp_chr_free_connection(Chardev *chr)
417
417
418
418
tcp_set_msgfds (chr , NULL , 0 );
419
419
remove_fd_in_watch (chr );
420
- if (s -> state == TCP_CHARDEV_STATE_CONNECTING
421
- || s -> state == TCP_CHARDEV_STATE_CONNECTED ) {
420
+ if (s -> registered_yank &&
421
+ (s -> state == TCP_CHARDEV_STATE_CONNECTING
422
+ || s -> state == TCP_CHARDEV_STATE_CONNECTED )) {
422
423
yank_unregister_function (CHARDEV_YANK_INSTANCE (chr -> label ),
423
424
yank_generic_iochannel ,
424
425
QIO_CHANNEL (s -> sioc ));
@@ -940,9 +941,11 @@ static int tcp_chr_add_client(Chardev *chr, int fd)
940
941
}
941
942
tcp_chr_change_state (s , TCP_CHARDEV_STATE_CONNECTING );
942
943
tcp_chr_set_client_ioc_name (chr , sioc );
943
- yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
944
- yank_generic_iochannel ,
945
- QIO_CHANNEL (sioc ));
944
+ if (s -> registered_yank ) {
945
+ yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
946
+ yank_generic_iochannel ,
947
+ QIO_CHANNEL (sioc ));
948
+ }
946
949
ret = tcp_chr_new_client (chr , sioc );
947
950
object_unref (OBJECT (sioc ));
948
951
return ret ;
@@ -957,9 +960,11 @@ static void tcp_chr_accept(QIONetListener *listener,
957
960
958
961
tcp_chr_change_state (s , TCP_CHARDEV_STATE_CONNECTING );
959
962
tcp_chr_set_client_ioc_name (chr , cioc );
960
- yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
961
- yank_generic_iochannel ,
962
- QIO_CHANNEL (cioc ));
963
+ if (s -> registered_yank ) {
964
+ yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
965
+ yank_generic_iochannel ,
966
+ QIO_CHANNEL (cioc ));
967
+ }
963
968
tcp_chr_new_client (chr , cioc );
964
969
}
965
970
@@ -975,9 +980,11 @@ static int tcp_chr_connect_client_sync(Chardev *chr, Error **errp)
975
980
object_unref (OBJECT (sioc ));
976
981
return -1 ;
977
982
}
978
- yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
979
- yank_generic_iochannel ,
980
- QIO_CHANNEL (sioc ));
983
+ if (s -> registered_yank ) {
984
+ yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
985
+ yank_generic_iochannel ,
986
+ QIO_CHANNEL (sioc ));
987
+ }
981
988
tcp_chr_new_client (chr , sioc );
982
989
object_unref (OBJECT (sioc ));
983
990
return 0 ;
@@ -993,9 +1000,11 @@ static void tcp_chr_accept_server_sync(Chardev *chr)
993
1000
tcp_chr_change_state (s , TCP_CHARDEV_STATE_CONNECTING );
994
1001
sioc = qio_net_listener_wait_client (s -> listener );
995
1002
tcp_chr_set_client_ioc_name (chr , sioc );
996
- yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
997
- yank_generic_iochannel ,
998
- QIO_CHANNEL (sioc ));
1003
+ if (s -> registered_yank ) {
1004
+ yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
1005
+ yank_generic_iochannel ,
1006
+ QIO_CHANNEL (sioc ));
1007
+ }
999
1008
tcp_chr_new_client (chr , sioc );
1000
1009
object_unref (OBJECT (sioc ));
1001
1010
}
@@ -1124,9 +1133,11 @@ static void qemu_chr_socket_connected(QIOTask *task, void *opaque)
1124
1133
1125
1134
if (qio_task_propagate_error (task , & err )) {
1126
1135
tcp_chr_change_state (s , TCP_CHARDEV_STATE_DISCONNECTED );
1127
- yank_unregister_function (CHARDEV_YANK_INSTANCE (chr -> label ),
1128
- yank_generic_iochannel ,
1129
- QIO_CHANNEL (sioc ));
1136
+ if (s -> registered_yank ) {
1137
+ yank_unregister_function (CHARDEV_YANK_INSTANCE (chr -> label ),
1138
+ yank_generic_iochannel ,
1139
+ QIO_CHANNEL (sioc ));
1140
+ }
1130
1141
check_report_connect_error (chr , err );
1131
1142
goto cleanup ;
1132
1143
}
@@ -1160,9 +1171,11 @@ static void tcp_chr_connect_client_async(Chardev *chr)
1160
1171
tcp_chr_change_state (s , TCP_CHARDEV_STATE_CONNECTING );
1161
1172
sioc = qio_channel_socket_new ();
1162
1173
tcp_chr_set_client_ioc_name (chr , sioc );
1163
- yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
1164
- yank_generic_iochannel ,
1165
- QIO_CHANNEL (sioc ));
1174
+ if (s -> registered_yank ) {
1175
+ yank_register_function (CHARDEV_YANK_INSTANCE (chr -> label ),
1176
+ yank_generic_iochannel ,
1177
+ QIO_CHANNEL (sioc ));
1178
+ }
1166
1179
/*
1167
1180
* Normally code would use the qio_channel_socket_connect_async
1168
1181
* method which uses a QIOTask + qio_task_set_error internally
0 commit comments