summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2011-08-28 02:50:02 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2011-08-28 02:50:02 +0000
commit29edc4e6fb2c8fb3a93aac36d9666efd21b92bd0 (patch)
tree2b1998d904a16cdce69f69041c89cc56d474e69e /sca-cpp/trunk/modules/oauth/mod-oauth1.cpp
parentd93ec216d63aed8ff2f08b4cba7de965dc14639c (diff)
Implement a portable alternative to __thread and get the HTTP and SQLDB components and the Auth modules working with the HTTPD multithreaded event MPM.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1162472 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp/trunk/modules/oauth/mod-oauth1.cpp')
-rw-r--r--sca-cpp/trunk/modules/oauth/mod-oauth1.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp b/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp
index 252d5c5ee0..ca7f562b60 100644
--- a/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp
+++ b/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp
@@ -36,6 +36,7 @@ extern "C" {
#include "tree.hpp"
#include "value.hpp"
#include "monad.hpp"
+#include "parallel.hpp"
#include "../json/json.hpp"
#include "../http/httpd.hpp"
#include "../http/http.hpp"
@@ -65,7 +66,7 @@ public:
list<list<value> > appkeys;
list<string> mcaddrs;
memcache::MemCached mc;
- http::CURLSession cs;
+ perthread_ptr<http::CURLSession> cs;
};
/**
@@ -476,6 +477,24 @@ int postConfig(apr_pool_t* p, unused apr_pool_t* plog, unused apr_pool_t* ptemp,
}
/**
+ * Lambda function that creates a new CURL session.
+ */
+class newsession {
+public:
+ newsession(const string& ca, const string& cert, const string& key) : ca(ca), cert(cert), key(key) {
+ }
+
+ const gc_ptr<http::CURLSession> operator()() const {
+ return new (gc_new<http::CURLSession>()) http::CURLSession(ca, cert, key, "");
+ }
+
+private:
+ const string ca;
+ const string cert;
+ const string key;
+};
+
+/**
* Child process initialization.
*/
void childInit(apr_pool_t* p, server_rec* s) {
@@ -494,7 +513,7 @@ void childInit(apr_pool_t* p, server_rec* s) {
sc.mc = *(new (gc_new<memcache::MemCached>()) memcache::MemCached(sc.mcaddrs));
// Setup a CURL session
- sc.cs = *(new (gc_new<http::CURLSession>()) http::CURLSession(sc.ca, sc.cert, sc.key, ""));
+ sc.cs = perthread_ptr<http::CURLSession>(lambda<gc_ptr<http::CURLSession>()>(newsession(sc.ca, sc.cert, sc.key)));
// Merge the updated configuration into the virtual hosts
postConfigMerge(sc, s->next);