[Openvpn-devel,v3] multi_io: replace TA_INITIAL with TA_INSTANCE_POST
Commit Message
From: Gianmarco De Gregori <gianmarco@mandelbit.com>
TA_INITIAL is TA_INSTANCE_POST plus multi_tcp_set_global_rw_flags(),
which multi_io_post() already calls once the instance has no output
left. Use TA_INSTANCE_POST for new TCP instances too and drop
TA_INITIAL.
With UDP instances going through the state machine as well, make the
MTP_NONE branch of multi_io_post() explicitly TCP only: reading the
stream residual and re-arming the socket only make sense on a
connection-oriented socket. multi_tcp_set_global_rw_flags() is then
never called on a datagram instance, and loses its proto check.
Change-Id: I4637d59ed1fba450e81518766526d934cd2902b7
Signed-off-by: Gianmarco De Gregori <gianmarco@mandelbit.com>
Acked-by: Razvan Cojocaru <razvanc@mailbox.org>
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2049
---
This change was reviewed on Gerrit and approved by at least one
developer. I request to merge it to master.
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2049
This mail reflects revision 3 of this Change.
Acked-by according to Gerrit (reflected above):
Razvan Cojocaru <razvanc@mailbox.org>
@@ -118,11 +118,8 @@
void
multi_tcp_set_global_rw_flags(struct multi_context *m, struct multi_instance *mi)
{
- if (mi && !proto_is_dgram(mi->context.c2.link_sockets[0]->info.proto))
- {
- mi->socket_set_called = true;
- socket_set(mi->context.c2.link_sockets[0], m->multi_io->es,
- mbuf_defined(mi->tcp_link_out_deferred) ? EVENT_WRITE : EVENT_READ, &mi->ev_arg,
- &mi->tcp_rwflags);
- }
+ mi->socket_set_called = true;
+ socket_set(mi->context.c2.link_sockets[0], m->multi_io->es,
+ mbuf_defined(mi->tcp_link_out_deferred) ? EVENT_WRITE : EVENT_READ, &mi->ev_arg,
+ &mi->tcp_rwflags);
}
@@ -76,9 +76,6 @@
case TA_TUN_WRITE:
return "TA_TUN_WRITE";
- case TA_INITIAL:
- return "TA_INITIAL";
-
case TA_TIMEOUT:
return "TA_TIMEOUT";
@@ -435,12 +432,6 @@
multi_io_write_link(m, mi, true, mpp_flags);
break;
- case TA_INITIAL:
- ASSERT(mi);
- multi_tcp_set_global_rw_flags(m, mi);
- multi_process_post(m, mi, mpp_flags);
- break;
-
case TA_INSTANCE_POST:
ASSERT(mi);
multi_process_post(m, mi, mpp_flags);
@@ -486,13 +477,16 @@
break;
case MTP_NONE:
- if (mi && sockets_read_residual(c))
+ if (mi && link_socket_connection_oriented(mi->context.c2.link_sockets[0]))
{
- newaction = TA_SOCKET_READ_RESIDUAL;
- }
- else
- {
- multi_tcp_set_global_rw_flags(m, mi);
+ if (sockets_read_residual(c))
+ {
+ newaction = TA_SOCKET_READ_RESIDUAL;
+ }
+ else
+ {
+ multi_tcp_set_global_rw_flags(m, mi);
+ }
}
break;
@@ -564,7 +558,7 @@
* before returning to the main loop. */
if (mi)
{
- multi_io_action(m, mi, NULL, TA_INITIAL, false);
+ multi_io_action(m, mi, NULL, TA_INSTANCE_POST, false);
}
}
else if (e->rwflags & EVENT_READ)
@@ -41,10 +41,9 @@
#define TA_SOCKET_WRITE_DEFERRED 5
#define TA_TUN_READ 6
#define TA_TUN_WRITE 7
-#define TA_INITIAL 8
-#define TA_TIMEOUT 9
-#define TA_TUN_WRITE_TIMEOUT 10
-#define TA_INSTANCE_POST 11
+#define TA_TIMEOUT 8
+#define TA_TUN_WRITE_TIMEOUT 9
+#define TA_INSTANCE_POST 10
/*
* I/O state and events tracker