Ver código fonte

Send a new request to a peer after sending cancel.

master
Richard Nyberg 19 anos atrás
pai
commit
aa1fe4b2dd
1 arquivos alterados com 24 adições e 23 exclusões
  1. +24
    -23
      btpd/policy_if.c

+ 24
- 23
btpd/policy_if.c Ver arquivo

@@ -252,10 +252,6 @@ cm_on_block(struct peer *p, struct block_request *req,
struct block *blk = req->blk; struct block *blk = req->blk;
struct piece *pc = blk->pc; struct piece *pc = blk->pc;


BTPDQ_REMOVE(&blk->reqs, req, blk_entry);
free(req);
pc->nreqs--;

off_t cbegin = index * p->tp->meta.piece_length + begin; off_t cbegin = index * p->tp->meta.piece_length + begin;
torrent_put_bytes(p->tp, data, cbegin, length); torrent_put_bytes(p->tp, data, cbegin, length);


@@ -263,26 +259,31 @@ cm_on_block(struct peer *p, struct block_request *req,
pc->ngot++; pc->ngot++;


if (tp->endgame) { if (tp->endgame) {
if (!BTPDQ_EMPTY(&blk->reqs)) { struct block_request *req;
struct net_buf *nb = nb_create_cancel(index, begin, length); struct net_buf *cancel = nb_create_cancel(index, begin, length);
nb_hold(nb); nb_hold(cancel);
struct block_request *req = BTPDQ_FIRST(&blk->reqs); BTPDQ_FOREACH(req, &blk->reqs, blk_entry) {
while (req != NULL) { if (req->p != p)
struct block_request *next = BTPDQ_NEXT(req, blk_entry); peer_cancel(req->p, req, cancel);
peer_cancel(req->p, req, nb); pc->nreqs--;
free(req); }
pc->nreqs--; nb_drop(cancel);
req = next; cm_piece_reorder_eg(pc);
} req = BTPDQ_FIRST(&blk->reqs);
BTPDQ_INIT(&blk->reqs); while (req != NULL) {
nb_drop(nb); struct block_request *next = BTPDQ_NEXT(req, blk_entry);
} if (peer_leech_ok(req->p) && !peer_laden(req->p))
cm_piece_reorder_eg(pc); cm_assign_requests_eg(req->p);
if (pc->ngot == pc->nblocks) free(req);
cm_on_piece(pc); req = next;
if (peer_leech_ok(p) && !peer_laden(p)) }
cm_assign_requests_eg(p); BTPDQ_INIT(&blk->reqs);
if (pc->ngot == pc->nblocks)
cm_on_piece(pc);
} else { } else {
BTPDQ_REMOVE(&blk->reqs, req, blk_entry);
free(req);
pc->nreqs--;
// XXX: Needs to be looked at if we introduce snubbing. // XXX: Needs to be looked at if we introduce snubbing.
clear_bit(pc->down_field, begin / PIECE_BLOCKLEN); clear_bit(pc->down_field, begin / PIECE_BLOCKLEN);
pc->nbusy--; pc->nbusy--;


||||||
x
 
000:0
Carregando…
Cancelar
Salvar