|
Boost Users : |
From: Jeff Flinn (TriumphSprint2000_at_[hidden])
Date: 2008-03-06 18:30:38
In case you don't get an answer here you might try posting on the boost
spirit general mailing list.
Jeff Flinn
Andreas Bruckmeier wrote:
> Hi out there,
>
> after searching for the cause of segmentation faults in my program
> i figured out that it happens while parsing my grammar with spirit.
> But this happens only if i run multiple threads,
> with only one thread all works as expected.
>
> I used the current boost trunk, gcc 4.1.2 and option D_REENTRANT
>
> Does anybody have a clue what happens inside parse(...)
> that could cause this segfault?
>
> Best regards
> Andi
>
> calling code: ('buf' is a zero-terminated string)
> --------------------------------------------------------
> HttpRequestGrammar parser;
> parse_info<const char*> parserInfo = parse(buf, parser);
>
>
> my grammar: (cutted some rules to limit length ;-))
> --------------------------------------------------------
> #ifndef BASIC_HTTP_GRAMMAR_H_
> #define BASIC_HTTP_GRAMMAR_H_
>
> #include <boost/spirit/core.hpp>
> #include <boost/spirit/actor/assign_actor.hpp>
> #include <boost/spirit/actor/insert_at_actor.hpp>
>
> using namespace boost::spirit;
>
> struct HttpRequestGrammar : public grammar<HttpRequestGrammar> {
>
> template <typename ScannerT> struct definition {
>
> definition(HttpRequestGrammar const& self) {
> first = (
>
> request = *( SP | CRLF ) >> requestLine >> CRLF
> >> *(( generalHeader | requestHeader |
> entityHeader ) >> CRLF) >> CRLF,
>
> requestLine = method[insert_at_a(self.headerMap,
> "method")] >> SP
> >> requestUri[insert_at_a(self.headerMap,
> "url")]
> >> SP >>
> httpVersion[insert_at_a(self.headerMap, "version")],
>
> method = str_p("GET") | "HEAD",
> ...
> ..
> token = +graph_p,
> SP = str_p(" "),
> CRLF = str_p("\r\n")
> );
> }
>
> subrule<0> request;
> subrule<1> requestLine;
> subrule<2> generalHeader;
> ...
> ..
> subrule<1000> SP;
> subrule<1001> CRLF;
>
> rule<ScannerT> first;
> rule<ScannerT> const&
>
> start() const {
> return first;
> }
>
> };
>
> mutable std::map<std::string, std::string> headerMap; };
>
> #endif /*BASIC_HTTP_GRAMMAR_H_*/
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net