diff --git a/src/include/gpxe/retry.h b/src/include/gpxe/retry.h index e0c0248b..e71e7b3b 100644 --- a/src/include/gpxe/retry.h +++ b/src/include/gpxe/retry.h @@ -35,6 +35,7 @@ struct retry_timer { }; extern void start_timer ( struct retry_timer *timer ); +extern void start_timer_nodelay ( struct retry_timer *timer ); extern void stop_timer ( struct retry_timer *timer ); /** diff --git a/src/net/retry.c b/src/net/retry.c index 6734968f..0f711e6d 100644 --- a/src/net/retry.c +++ b/src/net/retry.c @@ -73,6 +73,18 @@ void start_timer ( struct retry_timer *timer ) { timer, timer->start, ( timer->start + timer->timeout ) ); } +/** + * Start timer with no delay + * + * @v timer Retry timer + * + * This starts the timer running with a zero timeout value. + */ +void start_timer_nodelay ( struct retry_timer *timer ) { + start_timer ( timer ); + timer->timeout = 0; +} + /** * Stop timer * diff --git a/src/net/tcp.c b/src/net/tcp.c index 01daf75a..28cf95fb 100644 --- a/src/net/tcp.c +++ b/src/net/tcp.c @@ -232,7 +232,7 @@ static int tcp_open ( struct xfer_interface *xfer, struct sockaddr *peer, goto err; /* Start timer to initiate SYN */ - start_timer ( &tcp->timer ); + start_timer_nodelay ( &tcp->timer ); /* Attach parent interface, transfer reference to connection * list and return diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index ed455632..86695f12 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -912,7 +912,7 @@ int start_dhcp ( struct job_interface *job, struct net_device *netdev, goto err; /* Start timer to initiate initial DHCPREQUEST */ - start_timer ( &dhcp->timer ); + start_timer_nodelay ( &dhcp->timer ); /* Attach parent interface, mortalise self, and return */ job_plug_plug ( &dhcp->job, job ); diff --git a/src/net/udp/tftp.c b/src/net/udp/tftp.c index ea4d1df3..7f1c4ce6 100644 --- a/src/net/udp/tftp.c +++ b/src/net/udp/tftp.c @@ -657,7 +657,7 @@ int tftp_open ( struct xfer_interface *xfer, struct uri *uri ) { goto err; /* Start timer to initiate RRQ */ - start_timer ( &tftp->timer ); + start_timer_nodelay ( &tftp->timer ); /* Attach to parent interface, mortalise self, and return */ xfer_plug_plug ( &tftp->xfer, xfer );