[civetweb] Interface for setting stack size and scheduler options

Christian Mauderer christian.mauderer at embedded-brains.de
Mon May 23 19:23:52 UTC 2016



Am Sonntag, 22. Mai 2016 23:26:07 UTC+2 schrieb bel:
>
>
>
> On Sunday, May 22, 2016 at 11:04:44 AM UTC+2, Christian Mauderer wrote:
>>
>>
>> I created a draft for a callback. It's not worked out and only thought as 
>> a basis for further discussions:
>>
>>   
>> https://github.com/c-mauderer/civetweb/commit/380db13ad3c6c504002ba508605ced6d8ab7d550
>>
>
> I just had a look at the interface (civetweb.h), but not the 
> implementation yet:
>
>    - Please do not change the typedef for mg_thread_func_t, this is a 
>    compatibility issue (see also below).
>
> OK. Like I said: It was only quickly hacked together change as a basis for 
further discussion so this one slipped.

>
>    - 
>    - You should not use enum types (like you did in your change to init_thread) 
>    but only enum constants (like in your start_thread) in the interface.
>    So you should remove the name, like
>    enum */* no name here */* { TIMEOUT_INFINITE = -1 };
>    
> I'll change that. Is there any special reason for that (like C standard 
compatibility issues) or is it just the coding style? 

>
>    - 
>    - Since we need to replace *mg_start_thread_with_id*, there must be an 
>    additional output parameter *thread_id* in the *start_thread* 
>    callback. This parameter is later used in *mg_join_thread*, to wait 
>    for the thread to terminate. I think an additional callback for that is 
>    required as well. If thread creation is "outsourced", the code that took 
>    responsibility for thread creation should be able to handle termination as 
>    well, if this is required for a non-Windows-non-pthread threading system. 
>    In theory it could be done internally using an additional waitable object 
>    (event, mutex, ..), but I think this is a rare case that should not make 
>    the Windows and Linux code more complicated, so let's allow to handle it 
>    externally.
>    
>
> I assume you think of the *pthread_t *threadidptr*. I have overseen this 
one. Should this be a generic pointer (*void **) or can we use the *pthread_t 
** pointer? I think *pthread_t* is problematic on windows?
 

>  
>
>> I had the following problems:
>>
>> - The thread has a different return type for windows and for POSIX. It 
>> seems that no thread is really using the possibility to return anything. 
>> Currently I removed the return and just set it to void. I would expect that 
>> this leads to warnings when compiling the code. How could we handle this?
>>
>
> We already have a definition in civetweb.h:
> *typedef void *(*mg_thread_func_t)(void *);*
> This is already a part of the public interface, so it must not be changed 
> unless there are compelling reasons - style preferences are not compelling 
> reasons.
>
> I didn't change it due to style preferences. I changed it due to the 
different return type on windows. The *_beginthreadex* call used on windows 
returns an unsigned while the POSIX functions return a void pointer. Both 
results haven't been used and just needed some extra #ifdefs. But like I 
said, it is quite likely a problem anyway so I will look into another 
solution.
 

>
> - The *struct mg_context* is declared in the civetweb.h but defined in 
>> civetweb.c file. So It could be tricky to access any context fields from 
>> inside a callback (e.g. for getting parameters). How is this handled in 
>> other callbacks? Did I overlook something?
>>
>
> See civetweb.h:
>
> CIVETWEB_API const char **mg_get_option*(const struct mg_context *ctx, 
> const char *name);
>  
> CIVETWEB_API void **mg_get_user_data*(const struct mg_context *ctx);
>
>
Thanks for the hint. Rather than using the context directly some helper 
functions are used. It's definitively a better solution than some exposed 
internal structures would be. I just thought into a wrong direction.

I'll try to update the patch in the next few days and will report back with 
an improved version.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20160523/48cafdbb/attachment-0002.html>


More information about the devel mailing list