@@ -1052,20 +1052,24 @@ _mongoc_socket_try_sendv (mongoc_socket_t *sock, /* IN */
1052
1052
1053
1053
ssize_t
1054
1054
mongoc_socket_sendv (mongoc_socket_t * sock , /* IN */
1055
- mongoc_iovec_t * iov , /* IN */
1055
+ mongoc_iovec_t * in_iov , /* IN */
1056
1056
size_t iovcnt , /* IN */
1057
1057
int64_t expire_at ) /* IN */
1058
1058
{
1059
1059
ssize_t ret = 0 ;
1060
1060
ssize_t sent ;
1061
1061
size_t cur = 0 ;
1062
+ mongoc_iovec_t * iov ;
1062
1063
1063
1064
ENTRY ;
1064
1065
1065
1066
bson_return_val_if_fail (sock , -1 );
1066
- bson_return_val_if_fail (iov , -1 );
1067
+ bson_return_val_if_fail (in_iov , -1 );
1067
1068
bson_return_val_if_fail (iovcnt , -1 );
1068
1069
1070
+ iov = bson_malloc (sizeof (* iov ) * iovcnt );
1071
+ memcpy (iov , in_iov , sizeof (* iov ) * iovcnt );
1072
+
1069
1073
for (;;) {
1070
1074
sent = _mongoc_socket_try_sendv (sock , & iov [cur ], iovcnt - cur );
1071
1075
@@ -1076,7 +1080,8 @@ mongoc_socket_sendv (mongoc_socket_t *sock, /* IN */
1076
1080
*/
1077
1081
if (sent == -1 ) {
1078
1082
if (!_mongoc_socket_errno_is_again (sock )) {
1079
- RETURN (ret ? ret : -1 );
1083
+ ret = -1 ;
1084
+ GOTO (CLEANUP );
1080
1085
}
1081
1086
}
1082
1087
@@ -1117,7 +1122,7 @@ mongoc_socket_sendv (mongoc_socket_t *sock, /* IN */
1117
1122
#else
1118
1123
errno = ETIMEDOUT ;
1119
1124
#endif
1120
- RETURN ( ret ? ret : -1 );
1125
+ GOTO ( CLEANUP );
1121
1126
}
1122
1127
1123
1128
/*
@@ -1131,10 +1136,13 @@ mongoc_socket_sendv (mongoc_socket_t *sock, /* IN */
1131
1136
errno = ETIMEDOUT ;
1132
1137
#endif
1133
1138
}
1134
- RETURN ( ret ? ret : -1 );
1139
+ GOTO ( CLEANUP );
1135
1140
}
1136
1141
}
1137
1142
1143
+ CLEANUP :
1144
+ bson_free (iov );
1145
+
1138
1146
RETURN (ret );
1139
1147
}
1140
1148
0 commit comments