Bläddra i källkod

Use a flag (PF_DO_UNWANT) to indicate that we should send an uninterest

message when we no longer have any pending requests. This fixes a bug
where two uniterest messages were sent to a peer that was no longer
wanted in endgame.
master
Richard Nyberg 19 år sedan
förälder
incheckning
3f6d7576a5
2 ändrade filer med 11 tillägg och 1 borttagningar
  1. +10
    -1
      btpd/peer.c
  2. +1
    -0
      btpd/peer.h

+ 10
- 1
btpd/peer.c Visa fil

@@ -223,12 +223,16 @@ peer_want(struct peer *p, uint32_t index)
p->nwant++; p->nwant++;
if (p->nwant == 1) { if (p->nwant == 1) {
if (p->nreqs_out == 0) { if (p->nreqs_out == 0) {
assert((p->flags & PF_DO_UNWANT) == 0);
int unsent = 0; int unsent = 0;
struct nb_link *nl = BTPDQ_LAST(&p->outq, nb_tq); struct nb_link *nl = BTPDQ_LAST(&p->outq, nb_tq);
if (nl != NULL && nl->nb->type == NB_UNINTEREST) if (nl != NULL && nl->nb->type == NB_UNINTEREST)
unsent = peer_unsend(p, nl); unsent = peer_unsend(p, nl);
if (!unsent) if (!unsent)
peer_send(p, nb_create_interest()); peer_send(p, nb_create_interest());
} else {
assert((p->flags & PF_DO_UNWANT) != 0);
p->flags &= ~PF_DO_UNWANT;
} }
p->flags |= PF_I_WANT; p->flags |= PF_I_WANT;
} }
@@ -243,6 +247,8 @@ peer_unwant(struct peer *p, uint32_t index)
p->flags &= ~PF_I_WANT; p->flags &= ~PF_I_WANT;
if (p->nreqs_out == 0) if (p->nreqs_out == 0)
peer_send(p, nb_create_uninterest()); peer_send(p, nb_create_uninterest());
else
p->flags |= PF_DO_UNWANT;
} }
} }


@@ -311,8 +317,11 @@ peer_create_out_compact(struct torrent *tp, const char *compact)
void void
peer_on_no_reqs(struct peer *p) peer_on_no_reqs(struct peer *p)
{ {
if (p->nwant == 0) if ((p->flags & PF_DO_UNWANT) != 0) {
assert(p->nwant == 0);
p->flags &= ~PF_DO_UNWANT;
peer_send(p, nb_create_uninterest()); peer_send(p, nb_create_uninterest());
}
} }


void void


+ 1
- 0
btpd/peer.h Visa fil

@@ -10,6 +10,7 @@
#define PF_ATTACHED 0x40 #define PF_ATTACHED 0x40
#define PF_NO_REQUESTS 0x80 #define PF_NO_REQUESTS 0x80
#define PF_INCOMING 0x100 #define PF_INCOMING 0x100
#define PF_DO_UNWANT 0x200


#define RATEHISTORY 20 #define RATEHISTORY 20
#define MAXPIECEMSGS 128 #define MAXPIECEMSGS 128


||||||
x
 
000:0
Laddar…
Avbryt
Spara