diff options
author | Nicolás Reynolds <fauno@endefensadelsl.org> | 2013-12-27 23:55:53 +0000 |
---|---|---|
committer | Nicolás Reynolds <fauno@endefensadelsl.org> | 2013-12-27 23:55:53 +0000 |
commit | 65eeff79fff8a1bfdf67ca51d147384f46f4d5c0 (patch) | |
tree | fbfdff322b28d9a3c37e6e31c94caf1d8e48dac1 /community/trickle | |
parent | d53c44f055929b18d7d1b25f8367ee5836c435fc (diff) |
Fri Dec 27 23:54:04 UTC 2013
Diffstat (limited to 'community/trickle')
-rw-r--r-- | community/trickle/PKGBUILD | 21 | ||||
-rw-r--r-- | community/trickle/fix-crasher.patch | 86 |
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; + } + |