@@ -149,8 +149,9 @@ static void state_single(struct peer *peer,
149
149
bitcoind_send_tx (peer -> dstate , broadcast );
150
150
}
151
151
152
+ /* Start output if not running already; it will close conn. */
152
153
if (peer -> cond == PEER_CLOSED )
153
- io_close (peer -> conn );
154
+ io_wake (peer );
154
155
}
155
156
156
157
static void try_command (struct peer * peer )
@@ -170,9 +171,6 @@ static void try_command(struct peer *peer)
170
171
if (peer -> curr_cmd .cmd != INPUT_NONE ) {
171
172
state_single (peer , peer -> curr_cmd .cmd ,
172
173
& peer -> curr_cmd .cmddata );
173
-
174
- if (peer -> cond == PEER_CLOSED )
175
- io_close (peer -> conn );
176
174
}
177
175
}
178
176
}
@@ -209,8 +207,12 @@ static struct io_plan *pkt_out(struct io_conn *conn, struct peer *peer)
209
207
{
210
208
Pkt * out ;
211
209
212
- if (peer -> num_outpkt == 0 )
210
+ if (peer -> num_outpkt == 0 ) {
211
+ /* We close the connection once we've sent everything. */
212
+ if (peer -> cond == PEER_CLOSED )
213
+ return io_close (conn );
213
214
return io_out_wait (conn , peer , pkt_out , peer );
215
+ }
214
216
215
217
out = peer -> outpkt [-- peer -> num_outpkt ];
216
218
return peer_write_packet (conn , peer , out , pkt_out );
@@ -222,16 +224,14 @@ static struct io_plan *pkt_in(struct io_conn *conn, struct peer *peer)
222
224
const tal_t * ctx = tal (peer , char );
223
225
224
226
idata .pkt = tal_steal (ctx , peer -> inpkt );
225
- state_event (peer , peer -> inpkt -> pkt_case , & idata );
227
+
228
+ /* We ignore packets if they tell us to. */
229
+ if (peer -> cond != PEER_CLOSED )
230
+ state_event (peer , peer -> inpkt -> pkt_case , & idata );
226
231
227
232
/* Free peer->inpkt unless stolen above. */
228
233
tal_free (ctx );
229
234
230
- /* If we've closed (above), don't try to read (we can call
231
- * io_close multiple times with no harm). */
232
- if (peer -> cond == PEER_CLOSED )
233
- return io_close (conn );
234
-
235
235
return peer_read_packet (conn , peer , pkt_in );
236
236
}
237
237
@@ -252,11 +252,6 @@ static struct io_plan *peer_crypto_on(struct io_conn *conn, struct peer *peer)
252
252
queue_cmd (peer , do_anchor_offer , NULL );
253
253
try_command (peer );
254
254
255
- /* If we've closed (above), don't continue (we can call
256
- * io_close multiple times with no harm). */
257
- if (peer -> cond == PEER_CLOSED )
258
- return io_close (conn );
259
-
260
255
return io_duplex (conn ,
261
256
peer_read_packet (conn , peer , pkt_in ),
262
257
pkt_out (conn , peer ));
0 commit comments