httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sorin Manolache <sor...@gmail.com>
Subject Re: Mutex protection of output bucket brigade
Date Wed, 12 Jun 2013 12:48:52 GMT
On 2013-06-12 14:16, Alex Bligh wrote:
>
> But that aside, is it safe to call apwrite() from one thread whilst there's a read in
the other?

I do not know for sure, but I suppose it is not safe if both the read 
and the write operate on the same brigade.

> I'm not calling ap_pass_brigade (at least not directly). I'm doing (roughly)
>
>    ap_filter_t *of = state->r->connection->output_filters;
>    ap_fwrite(of, state->obb, (const char *)header, pos); /* Header */
>
> IE I'm doing an fwrite to output filter list, using the bucket brigade I've just created.
Is that OK?

I've checked the code of ap_fwrite. Apparently it buffers the data in 
the brigade. If the brigade is full, it calls ap_filter_flush, which, in 
turn, calls the ap_pass_brigade and clears the brigade after 
ap_pass_brigade has returned.

So not every call to ap_fwrite will push the data down the filter chain.

> Now I think I understand what happens with ap_fwrite (if that calls ap_pass_brigade),
I'm wondering whether (say) the input filter of mod_ssl ever talks to its output filter.

I think it's impossible. The brigade is created by you in the spawned 
thread, so I don't see how the SSL decode in the main thread could 
access it. And it's the output brigade that is corrupted, not some 
brigade internal to mod_ssl. As I see it, the output brigade 
(state->obb) is not shared between the threads.

Do you get the same errors when you disable mod_ssl?

S





Mime
View raw message