

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
4 messages in ru.sysoev.nginxRe: [DEV] nginx ngx_hash_t usage, and...| From | Sent On | Attachments |
|---|---|---|
| Brice Figureau | Sep 24, 2007 11:13 am | |
| Igor Sysoev | Sep 24, 2007 12:07 pm | |
| Brice Figureau | Sep 25, 2007 1:32 am | |
| Igor Sysoev | Sep 26, 2007 2:07 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: [DEV] nginx ngx_hash_t usage, and other questions... | Actions... |
|---|---|---|
| From: | Igor Sysoev (is-G...@public.gmane.org) | |
| Date: | Sep 26, 2007 2:07:53 am | |
| List: | ru.sysoev.nginx | |
On Tue, Sep 25, 2007 at 10:33:12AM +0200, Brice Figureau wrote:
For dynamic data I use rbtree.
OK, it seems that what you are doing in the limit zone module is almost what I planned to do. I think I'll study this code in more details.
You are placing the rbtree in this module in a shm segment. Is it to share it between the possibly multiple workers ?
Yes.
I was wondering how I could share my global data structure between the different workers...
See limit zone module.
A zone in nginx is shared memory segment created by ngx_shared_memory_add(). A zone has name and is inherited between reconfigurations if its size is not changed. nginx has simple slab allocator to alloc/free memory in zone.
I also have a few more general or basic questions:
1) There are a lot of ngx_str_t used, but all the ngx_string.c functions are using u_char* . Does it mean the strings are always null terminated and the ngx_str_t len parameter is used for something else ? So to use ngx_strcmp with 2 ngx_str_t, I just have to call it with the value?
No, ngx_str_t may be null terminated (and len does count null in the case), but in general it is not null terminated.
OK, so how do compare strings for instance ? ngx_strcmp is acting on null terminated strings, but since I don't know beforehand if the string is terminated or not... Maybe I have to use ngx_memn2cmp ?
No. use ngx_strNcmp(). The usual pattern to compare two ngx_str_t's is:
if (s1->len == s2->len && ngx_strncmp(s1->data, s2->data, s1->len) == 0) { ... }
Sometime, if I sure that both ngx_str_t are null terminated strings, then I use ngx_strcmp() in this pattern. But I always test the lengths before.
2) Can I register an handler or a phase handler that will be triggered at the end of a request (and if yes how) ? This is to do the cleanup in my hash table containing the uploading requests.
Use ngx_pool_cleanup_add(r->pool, size).
OK, then the handler will be called when the pool is deallocated, is that right? And the request pool is deallocated when the request is over.
Yes.
I don't have to add any memory to the request pool in my case; is it possible to pass 0 as the size ?
Yes. Size is intended to allocate some additional memory for callback context.
-- Igor Sysoev http://sysoev.ru/en/







