From: Tobias Brunner Date: Mon, 12 Aug 2013 10:06:25 +0000 (+0200) Subject: kernel-netlink,pfroute: Properly update address flag within ROAM_DELAY X-Git-Tag: 5.1.1dr1~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=11f468533f9917128d747abe889e75cf554cd6ba;p=thirdparty%2Fstrongswan.git kernel-netlink,pfroute: Properly update address flag within ROAM_DELAY 77d4a02 and 55da01f only updated the address flag when a job was created, which obviously had the same limitation as the old code. Fixes #374. --- diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c index 89fb076adc..43bcb677ba 100644 --- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c +++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c @@ -729,6 +729,7 @@ static void fire_roam_event(private_kernel_netlink_net_t *this, bool address) time_monotonic(&now); this->roam_lock->lock(this->roam_lock); + this->roam_address |= address; if (!timercmp(&now, &this->next_roam, >)) { this->roam_lock->unlock(this->roam_lock); @@ -736,7 +737,6 @@ static void fire_roam_event(private_kernel_netlink_net_t *this, bool address) } timeval_add_ms(&now, ROAM_DELAY); this->next_roam = now; - this->roam_address |= address; this->roam_lock->unlock(this->roam_lock); job = (job_t*)callback_job_create((callback_job_cb_t)roam_event, diff --git a/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c b/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c index 05aeb903b5..f432ecdb7c 100644 --- a/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c +++ b/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c @@ -565,6 +565,7 @@ static void fire_roam_event(private_kernel_pfroute_net_t *this, bool address) time_monotonic(&now); this->roam_lock->lock(this->roam_lock); + this->roam_address |= address; if (!timercmp(&now, &this->next_roam, >)) { this->roam_lock->unlock(this->roam_lock); @@ -572,7 +573,6 @@ static void fire_roam_event(private_kernel_pfroute_net_t *this, bool address) } timeval_add_ms(&now, ROAM_DELAY); this->next_roam = now; - this->roam_address |= address; this->roam_lock->unlock(this->roam_lock); job = (job_t*)callback_job_create((callback_job_cb_t)roam_event,