about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--btpd/upload.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/btpd/upload.c b/btpd/upload.c
index f8403ad..db7d5a3 100644
--- a/btpd/upload.c
+++ b/btpd/upload.c
@@ -19,8 +19,8 @@ rate_cmp(const void *arg1, const void *arg2)
 {
     struct peer *p1 = ((struct peer_sort *)arg1)->p;
     struct peer *p2 = ((struct peer_sort *)arg2)->p;
-    unsigned long rate1 = cm_full(p1->n->tp) ? p1->rate_up : p1->rate_dwn;
-    unsigned long rate2 = cm_full(p2->n->tp) ? p2->rate_up : p2->rate_dwn;
+    unsigned long rate1 = cm_full(p1->n->tp) ? p1->rate_up / 2: p1->rate_dwn;
+    unsigned long rate2 = cm_full(p2->n->tp) ? p2->rate_up / 2: p2->rate_dwn;
     if (rate1 < rate2)
         return -1;
     else if (rate1 == rate2)
@@ -51,9 +51,15 @@ choke_do(void)
         int unchoked[m_npeers];
 
         BTPDQ_FOREACH(p, &m_peerq, ul_entry) {
-            if (!peer_full(p) &&
-                ((cm_full(p->n->tp) && p->rate_up > 0)
-                    || (!cm_full(p->n->tp) && p->rate_dwn > 0))) {
+            int ok = 0;
+            if (!peer_full(p)) {
+                if (cm_full(p->n->tp)) {
+                    if (p->rate_up > 0)
+                        ok = 1;
+                } else if (peer_active_down(p) && p->rate_dwn > 0)
+                    ok = 1;
+            }
+            if (ok) {
                 worthy[nworthy].p = p;
                 worthy[nworthy].i = i;
                 nworthy++;