Hi,

At 14:40 12/06/2008, Cyril SCETBON wrote:
I've tested it on the host and did not get any error with a negative value or a big value :

cat test_malloc.c

#include <stdlib.h>
#include <stdio.h>

int main()
{
       printf("malloc(-4096)\n");
       malloc(-4096);
       printf("malloc(18446744073709547520)\n");
       malloc(18446744073709547520);
       return 0;
}

cc -g -w test_malloc.c -o test_malloc

./test_malloc
malloc(-4096)
malloc(18446744073709547520)

no segmentation fault

Quite normal, the malloc itself won't cause a segfault, it's the fact that something later uses space requested via malloc that couldn't be allocated (malloc then returned 0). What's the return value of the malloc calls?

, and the strace command shows :

write(1, "malloc(-4096)\n", 14malloc(-4096)
)         = 14
brk(0)                                  = 0x501000
brk(0x521000)                           = 0x521000
mmap(NULL, 2097152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x2b78f91d1000
munmap(0x2b78f91d1000, 192512)          = 0
munmap(0x2b78f9300000, 856064)          = 0
mprotect(0x2b78f9200000, 131072, PROT_READ|PROT_WRITE) = 0
mmap(NULL, 2097152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x2b78f9300000
munmap(0x2b78f9400000, 1048576)         = 0
mprotect(0x2b78f9300000, 131072, PROT_READ|PROT_WRITE) = 0
munmap(0x2b78f9300000, 1048576)         = 0
write(1, "malloc(18446744073709547520)\n", 29malloc(18446744073709547520)
) = 29
mmap(NULL, 2097152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x2b78f9300000
munmap(0x2b78f9400000, 1048576)         = 0
mprotect(0x2b78f9300000, 131072, PROT_READ|PROT_WRITE) = 0
munmap(0x2b78f9300000, 1048576)         = 0
munmap(0x2b78f8e94000, 4096)            = 0
exit_group(0)                           = ?
Process 15518 detached

- you'll notice that the mmap calls are the same for both calls (don't quite know what malloc is really doing here, it seems to be allocating more space then freeing up bits, probably trying to align on some large size), though neither size matches the actual request (?)

- the malloc-induced mmap is quite different from the one in your original strace (see the flags). Is that the same box? You must have some special compile flags or libraries in your slonik compile that change malloc's behaviour. Was your slony-1 install locally compiled or installed from binaries? If the latter you might want to try a good old wget/tar/configure/make to see if the result is the same...

Jacques.

_______________________________________________
Slony1-general mailing list
[email protected]
http://lists.slony.info/mailman/listinfo/slony1-general

Reply via email to