Hi, I was trying to debug the shmht caching, and got the following SEGV. Thr problem was also pointed out in http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17864..
I've attached a patch, to fix the problem. (With this patch, we'll be in sync with the ssl_util_table.c from mod_ssl for 1.3.x.) Thanks -Madhu Program received signal SIGSEGV, Segmentation fault. 0x6ff62334 in memcpy+0x144 () from /usr/lib/libc.2 (gdb) where #0 0x6ff62334 in memcpy+0x144 () from /usr/lib/libc.2 #1 0xa6dfc in ssl_scache_shmht_store (s=0x4008fb80, id=0x4087f8e0 "\310\fZ\3343^\246\320\352\372_\356\235}\302\266\013\r?wfn\261\\q\325\221\03 4\3534\372r", idlen=32, expiry=1047446337, sess=0x4087f898) at ssl_scache_shmht.c:220 #2 0x9e528 in ssl_scache_store (s=0x4008fb80, id=0x4087f8e0 "\310\fZ\3343^\246\320\352\372_\356\235}\302\266\013\r?wfn\261\\q\325\221\03 4\3534\372r", idlen=32, expiry=1047446337, sess=0x4087f898) at ssl_scache.c:129 #3 0x9612c in ssl_callback_NewSessionCacheEntry (ssl=0x4086a1a8, session=0x4087f898) at ssl_engine_kernel.c:1657 #4 0x1441c8 in ssl_update_cache+0x108 () #5 0xa6dfc in ssl_scache_shmht_store (s=Error accessing memory address 0x40000fdc: Bad address. ) at ssl_scache_shmht.c:220 Error accessing memory address 0x40000fec: Bad address. (gdb) quit $ cvs diff ssl_util_table.c Index: ssl_util_table.c =================================================================== RCS file: /home/cvs/httpd-2.0/modules/ssl/ssl_util_table.c,v retrieving revision 1.8 diff -u -r1.8 ssl_util_table.c --- ssl_util_table.c 3 Feb 2003 17:53:13 -0000 1.8 +++ ssl_util_table.c 12 Mar 2003 05:47:48 -0000 @@ -989,9 +989,7 @@ */ int table_clear(table_t * table_p) { -#if 0 table_entry_t *entry_p, *next_p; -#endif table_entry_t **bucket_p, **bounds_p; if (table_p == NULL) @@ -1000,14 +998,12 @@ return TABLE_ERROR_PNT; /* free the table allocation and table structure */ bounds_p = table_p->ta_buckets + table_p->ta_bucket_n; - for (bucket_p = table_p->ta_buckets; bucket_p <= bounds_p; bucket_p++) { -#if 0 + for (bucket_p = table_p->ta_buckets; bucket_p < bounds_p; bucket_p++) { for (entry_p = *bucket_p; entry_p != NULL; entry_p = next_p) { /* record the next pointer before we free */ next_p = entry_p->te_next_p; table_p->ta_free(table_p->opt_param, entry_p); } -#endif /* clear the bucket entry after we free its entries */ *bucket_p = NULL; }