znc: link to libstdc++ to fix performance issues on channel join

ZNC uses a map to cache channel memebers on join. Unfortunately uclibc++
uses a naive linked-list implementation with horrible performance, which
can cause joins to take a few minutes on popular channels.

Therefore Switch to libstdc++ which uses a much more performant hashmap.
ZNC by itself is already rather large, so the added footprint of
libstd++ vs uclibc++ does not matter that much anyway.

Should fix #11778.

Signed-off-by: Jonas Gorski <jogo@openwrt.org>
This commit is contained in:
Jonas Gorski 2014-11-21 13:19:30 +01:00
parent c950f48e7a
commit 1197194832
3 changed files with 4 additions and 46 deletions

View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=znc
PKG_VERSION:=1.4
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://znc.in/releases \
@ -33,7 +33,7 @@ endef
define Package/znc
$(Package/znc/default)
DEPENDS:=+libopenssl +libpthread $(CXX_DEPENDS)
DEPENDS:=+libopenssl +libpthread +libstdcpp
MENU:=1
endef
@ -261,14 +261,13 @@ $(eval $(call webskin,ice))
PKG_CONFIG_DEPENDS := $(patsubst %,CONFIG_PACKAGE_%,$(ZNC_MODULES))
include $(INCLUDE_DIR)/uclibc++.mk
include $(INCLUDE_DIR)/package.mk
CONFIGURE_VARS += \
CXXFLAGS="$(TARGET_CFLAGS) -fno-builtin -fno-rtti -nostdinc++" \
CXXFLAGS="$(TARGET_CFLAGS) -fno-builtin -fno-rtti" \
CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include" \
LDFLAGS="-nodefaultlibs -lc -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \
LIBS="-luClibc++ -lm -lssl -lcrypto $(LIBGCC_S) -lc"
LIBS="-lstdc++ -lm -lssl -lcrypto $(LIBGCC_S) -lc"
CONFIGURE_ARGS += \
--disable-c-ares \

View File

@ -1,28 +0,0 @@
From fa14938321eda39f16bee6068296e6abc9df7b85 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jonas.gorski+openwrt@gmail.com>
Date: Wed, 6 Apr 2011 04:11:48 +0200
Subject: [PATCH] Add a uClibc++ build workaround
---
modules/webadmin.cpp | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
--- a/modules/webadmin.cpp
+++ b/modules/webadmin.cpp
@@ -20,6 +20,7 @@
#include <znc/IRCNetwork.h>
#include <znc/IRCSock.h>
+using std::string;
using std::stringstream;
using std::make_pair;
using std::set;
@@ -75,7 +76,7 @@ class CWebAdminMod : public CModule {
public:
MODCONSTRUCTOR(CWebAdminMod) {
VPair vParams;
- vParams.push_back(make_pair("user", ""));
+ vParams.push_back(make_pair((string)"user", (string)""));
AddSubPage(new CWebSubPage("settings", "Global Settings", CWebSubPage::F_ADMIN));
AddSubPage(new CWebSubPage("edituser", "Your Settings", vParams));
AddSubPage(new CWebSubPage("traffic", "Traffic Info", CWebSubPage::F_ADMIN));

View File

@ -1,13 +0,0 @@
diff --git a/modules/certauth.cpp b/modules/certauth.cpp
index 61e5687..4857d59 100644
--- a/modules/certauth.cpp
+++ b/modules/certauth.cpp
@@ -204,7 +204,7 @@ public:
return;
}
- SCString::const_iterator it2 = it->second.begin();
+ SCString::iterator it2 = it->second.begin();
while (id > 1) {
++it2;
id--;