On 06/15/2016 09:18 PM, Rajalakshmi Iyer wrote:
Thanks everyone.
I have been able to compile a C++ module fine. But I am primarily
trying to figure out if it's safe to use features like STL containers
or Boost libraries within an Nginx module.
In my project, I used STL. it works fine.
I am asking this because if I try to allocate an std::string within
say the module context, I see a segmentation fault. I assume it's
because of the Nginx pool mechanism?
Not sure what is "say the module context", and how you allocate
std::string on Nginx pool. I believe there
are following combinations of "allocating std::string" and Nginx-pool usage.
1). does not use pool at all, statement like:
std::string *p = new std::string("haha"); // instance
allocated from heap
std::string s("haha") // instance allocated from stack.
2) use pool to allocate std::string instance, but use heap to
allocate data: like following
the instance is allocate on pool via placement new, but the data
is allocated from heap.
void *p = ngx_palloc(enough size)
std::string *s = new(p) std::string("haha")
it is fine so long as string instance's life time is not longer
than pool
3). if you want to allocate data on top of ngx pool (for efficiency
reasons), it is bit involved.
first, you need to define an allocation class like this
http://www.mcs.anl.gov/OpenAD/OpenADFortTkExtendedDox/mempool__allocator_8h_source.html
(NOTE that the MEM_POOL is similar to Nginx pool in many
ways). and feed to allocator
to construction.
e.g. typedef mempool_allocator<node_type> my_allocator;
tyepdef std::vector<node_type, my_alloctor> my_vector_t;
ngx_pool_t* the_ngx_pool = ....
my_vector_t vect(myalloctor(the_ngx_pool))
so the element will allocate from the nginx pool.
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel