On 12/18/2013 02:46 PM, Sergey Mironov wrote:
Hi. I've done some work regarding C callbacks, hook the app->handle
as you suggested. The patch is rather big, but I think it handles the problem
nice now. Basically, it adds ./src/c/srvthreads.c which does two things: a)
manages a number of permanently-running worker threads to handle
st_loopback_enqueue calls (see below), and b) manages a list of threads created
by user.

Could you remind me of your use case for this functionality?

Why isn't it sufficient just to start a periodic task that runs one or all tasks from a queue of URI strings every second? You would need only a tiny amount of FFI code (and no modifications to the base Ur/Web distribution) with that approach.

Here I have a question:
what does 'id' argument of
uw_context uw_request_new_context(int id, uw_app *app, loggers *ls)
do? Is it safe to keep several threads sharing same id?

First, a meta response: the whole request.h interface was not intended to be exposed for use in FFI code. It's really meant for internal Ur/Web stuff.

Second, the 'id' argument is important for generating [source] values, and I wouldn't recommend any change that stops it from being unique across server threads.

I saw the other questions in your message, which I'll return to answering if I become convinced that the approach you're following makes sense against the baseline of using periodic tasks.


A few other comments on your patch:

General C code shouldn't assume that the variable uw_application exists. Everything is implemented to work even when multiple distinct applications run in one Ur/Web process, though I never released the (working) code for doing that.

Why does your modified uw_request_context() take both app and loggers as arguments, when the latter implies the former?

_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to