summaryrefslogtreecommitdiff
path: root/community/trickle
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2013-12-27 23:55:53 +0000
committerNicolás Reynolds <fauno@endefensadelsl.org>2013-12-27 23:55:53 +0000
commit65eeff79fff8a1bfdf67ca51d147384f46f4d5c0 (patch)
treefbfdff322b28d9a3c37e6e31c94caf1d8e48dac1 /community/trickle
parentd53c44f055929b18d7d1b25f8367ee5836c435fc (diff)
Fri Dec 27 23:54:04 UTC 2013
Diffstat (limited to 'community/trickle')
-rw-r--r--community/trickle/PKGBUILD21
-rw-r--r--community/trickle/fix-crasher.patch86
2 files changed, 101 insertions, 6 deletions
diff --git a/community/trickle/PKGBUILD b/community/trickle/PKGBUILD
index 018c21816..949e210d6 100644
--- a/community/trickle/PKGBUILD
+++ b/community/trickle/PKGBUILD
@@ -1,24 +1,33 @@
-# $Id: PKGBUILD 80164 2012-11-17 02:17:02Z kkeen $
+# $Id: PKGBUILD 102975 2013-12-25 09:36:34Z bgyorgy $
# Maintainer: Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
# Contributor Romain Bouchaud-Leduc <r0m1.bl@camaris.org>
pkgname=trickle
pkgver=1.07
-pkgrel=7
+pkgrel=8
pkgdesc="Lightweight userspace bandwidth shaper"
arch=('i686' 'x86_64')
url="http://monkey.org/~marius/trickle"
license=('BSD')
depends=('libevent')
-source=("http://monkey.org/~marius/trickle/${pkgname}-${pkgver}.tar.gz")
-md5sums=('860ebc4abbbd82957c20a28bd9390d7d')
+source=("http://monkey.org/~marius/trickle/${pkgname}-${pkgver}.tar.gz"
+ "fix-crasher.patch")
+md5sums=('860ebc4abbbd82957c20a28bd9390d7d'
+ 'a072091bce131e9f7229bff85ed5858c')
-build() {
+prepare() {
cd "${srcdir}/${pkgname}-${pkgver}"
- # FS#23194
+ # FS#27549
sed -i 's|^_select(int|select(int|' trickle-overload.c
+ # FS#35872
+ patch -Np1 -i "${srcdir}/fix-crasher.patch"
+}
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
./configure --prefix=/usr \
--mandir=/usr/share/man
sed -i "s|.*in_addr_t.*||g" config.h
diff --git a/community/trickle/fix-crasher.patch b/community/trickle/fix-crasher.patch
new file mode 100644
index 000000000..c660f1ad1
--- /dev/null
+++ b/community/trickle/fix-crasher.patch
@@ -0,0 +1,86 @@
+diff --git a/trickle-overload.c b/trickle-overload.c
+index e72eb0c..9254e89 100644
+--- a/trickle-overload.c
++++ b/trickle-overload.c
+@@ -393,18 +393,14 @@ struct _pollfd {
+ }
+
+ static struct delay *
+-select_shift(struct delayhead *dhead, struct timeval *inittv,
++select_shift(struct delayhead *dhead, struct timeval *difftv,
+ struct timeval **delaytv)
+ {
+- struct timeval curtv, difftv;
+ struct delay *d;
+ struct sockdesc *sd;
+
+- gettimeofday(&curtv, NULL);
+- timersub(&curtv, inittv, &difftv);
+-
+ TAILQ_FOREACH(d, dhead, next) {
+- if (timercmp(&d->delaytv, &difftv, >))
++ if (timercmp(&d->delaytv, difftv, >))
+ break;
+ sd = d->sd;
+
+@@ -413,7 +409,7 @@ struct _pollfd {
+ }
+
+ if (d != NULL)
+- timersub(&d->delaytv, &difftv, *delaytv);
++ timersub(&d->delaytv, difftv, *delaytv);
+ else
+ *delaytv = NULL;
+
+@@ -431,8 +427,8 @@ struct _pollfd {
+ {
+ struct sockdesc *sd;
+ fd_set *fdsets[] = { wfds, rfds }, *fds;
+- struct timeval *delaytv, *selecttv = NULL, *timeout = NULL, _timeout,
+- inittv, curtv, difftv;
++ struct timeval *delaytv, _delaytv, *selecttv = NULL, *timeout = NULL,
++ _timeout, inittv, curtv, difftv;
+ short which;
+ struct delayhead dhead;
+ struct delay *d, *_d;
+@@ -462,15 +458,18 @@ struct _pollfd {
+ FD_ISSET(sd->sock, fds) &&
+ select_delay(&dhead, sd, which)) {
+ FD_CLR(sd->sock, fds);
+- nfds--;
+ }
+
+ gettimeofday(&inittv, NULL);
+ curtv = inittv;
+ d = TAILQ_FIRST(&dhead);
+- delaytv = d != NULL ? &d->delaytv : NULL;
++ if (d != NULL) {
++ _delaytv = d->delaytv;
++ delaytv = &_delaytv;
++ } else
++ delaytv = NULL;
++ timersub(&curtv, &inittv, &difftv);
+ again:
+- timersub(&inittv, &curtv, &difftv);
+ selecttv = NULL;
+
+ if (delaytv != NULL)
+@@ -498,15 +497,15 @@ struct _pollfd {
+ #endif /* DEBUG */
+
+ if (ret == 0 && delaytv != NULL && selecttv == delaytv) {
+- _d = select_shift(&dhead, &inittv, &delaytv);
++ gettimeofday(&curtv, NULL);
++ timersub(&curtv, &inittv, &difftv);
++ _d = select_shift(&dhead, &difftv, &delaytv);
+ while ((d = TAILQ_FIRST(&dhead)) != _d) {
+ FD_SET(d->sd->sock, fdsets[d->which]);
+- nfds++;
+ TAILQ_REMOVE(&dhead, d, next);
+ free(d);
+ }
+
+- gettimeofday(&curtv, NULL);
+ goto again;
+ }
+