- Mark
$ make valgrind
/usr/bin/cc -o kqtest -g -O0 -Wall -Werror -I../include -L.. -rdynamic
main.c kevent.c test.c proc.c read.c signal.c timer.c vnode.c user.c
-lkqueue -lpthread -lrt
LD_LIBRARY_PATH="..:/usr/sfw/lib/64" \
valgrind --tool=memcheck --leak-check=full --show-reachable=yes
--num-callers=20 --track-fds=yes ./kqtest
==3431== Memcheck, a memory error detector
==3431== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==3431== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for
copyright info
==3431== Command: ./kqtest
==3431==
1: test_peer_close_detection()
2: test_kqueue()
3: test_kevent_socket_add()
4: test_kevent_socket_del()
5: test_kevent_socket_add_without_ev_add()
6: test_kevent_socket_get()
7: test_kevent_socket_disable_and_enable()
8: test_kevent_socket_oneshot()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4047A9: test_kevent_socket_oneshot (read.c:223)
==3431== by 0x4050A8: test_evfilt_read (read.c:419)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57be7c8 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4047A9: test_kevent_socket_oneshot (read.c:223)
==3431== by 0x4050A8: test_evfilt_read (read.c:419)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Invalid read of size 4
==3431== at 0x503F444: __pthread_mutex_unlock_usercnt
(pthread_mutex_unlock.c:37)
==3431== by 0x4E2EE78: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4047A9: test_kevent_socket_oneshot (read.c:223)
==3431== by 0x4050A8: test_evfilt_read (read.c:419)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57be7b0 is 80 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4047A9: test_kevent_socket_oneshot (read.c:223)
==3431== by 0x4050A8: test_evfilt_read (read.c:419)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Invalid read of size 4
==3431== at 0x503F080: __pthread_mutex_unlock_full
(pthread_mutex_unlock.c:86)
==3431== by 0x4E2EE78: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4047A9: test_kevent_socket_oneshot (read.c:223)
==3431== by 0x4050A8: test_evfilt_read (read.c:419)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57be7b0 is 80 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4047A9: test_kevent_socket_oneshot (read.c:223)
==3431== by 0x4050A8: test_evfilt_read (read.c:419)
==3431== by 0x402C87: main (main.c:198)
==3431==
9: test_kevent_socket_clear()
10: test_kevent_socket_dispatch()
11: test_kevent_socket_listen_backlog()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x404A34: test_kevent_socket_listen_backlog (read.c:276)
==3431== by 0x4050E4: test_evfilt_read (read.c:424)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57beb98 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x404A34: test_kevent_socket_listen_backlog (read.c:276)
==3431== by 0x4050E4: test_evfilt_read (read.c:424)
==3431== by 0x402C87: main (main.c:198)
==3431==
12: test_kevent_socket_eof()
13: test_kevent_regular_file()
14: test_kevent_signal_add()
15: test_kevent_signal_del()
16: test_kevent_signal_get()
17: test_kevent_signal_disable()
18: test_kevent_signal_enable()
19: test_kevent_signal_oneshot()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4055ED: test_kevent_signal_oneshot (signal.c:108)
==3431== by 0x405B36: test_evfilt_signal (signal.c:186)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57bf2f8 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4055ED: test_kevent_signal_oneshot (signal.c:108)
==3431== by 0x405B36: test_evfilt_signal (signal.c:186)
==3431== by 0x402C87: main (main.c:198)
==3431==
20: test_kevent_signal_modify()
21: test_kevent_signal_dispatch()
22: test_kevent_timer_add()
23: test_kevent_timer_del()
24: test_kevent_timer_get()
25: test_kevent_timer_oneshot()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x405D5E: test_kevent_timer_oneshot (timer.c:65)
==3431== by 0x4061A0: test_evfilt_timer (timer.c:160)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57bf998 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x405D5E: test_kevent_timer_oneshot (timer.c:65)
==3431== by 0x4061A0: test_evfilt_timer (timer.c:160)
==3431== by 0x402C87: main (main.c:198)
==3431==
26: test_kevent_timer_periodic()
27: test_kevent_timer_disable_and_enable()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x405F61: test_kevent_timer_disable_and_enable (timer.c:114)
==3431== by 0x4061C8: test_evfilt_timer (timer.c:162)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57bfc28 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x405F61: test_kevent_timer_disable_and_enable (timer.c:114)
==3431== by 0x4061C8: test_evfilt_timer (timer.c:162)
==3431== by 0x402C87: main (main.c:198)
==3431==
28: test_kevent_timer_dispatch()
29: test_kevent_vnode_add()
30: test_kevent_vnode_del()
31: test_kevent_vnode_disable_and_enable()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4069D6: test_kevent_vnode_disable_and_enable (vnode.c:192)
==3431== by 0x406CF7: test_evfilt_vnode (vnode.c:257)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0058 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4069D6: test_kevent_vnode_disable_and_enable (vnode.c:192)
==3431== by 0x406CF7: test_evfilt_vnode (vnode.c:257)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Invalid read of size 4
==3431== at 0x503F444: __pthread_mutex_unlock_usercnt
(pthread_mutex_unlock.c:37)
==3431== by 0x4E2EE78: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4069D6: test_kevent_vnode_disable_and_enable (vnode.c:192)
==3431== by 0x406CF7: test_evfilt_vnode (vnode.c:257)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0040 is 80 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4069D6: test_kevent_vnode_disable_and_enable (vnode.c:192)
==3431== by 0x406CF7: test_evfilt_vnode (vnode.c:257)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Invalid read of size 4
==3431== at 0x503F080: __pthread_mutex_unlock_full
(pthread_mutex_unlock.c:86)
==3431== by 0x4E2EE78: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4069D6: test_kevent_vnode_disable_and_enable (vnode.c:192)
==3431== by 0x406CF7: test_evfilt_vnode (vnode.c:257)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0040 is 80 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4069D6: test_kevent_vnode_disable_and_enable (vnode.c:192)
==3431== by 0x406CF7: test_evfilt_vnode (vnode.c:257)
==3431== by 0x402C87: main (main.c:198)
==3431==
32: test_kevent_vnode_dispatch()
33: test_kevent_vnode_note_write()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x406642: test_kevent_vnode_note_write (vnode.c:116)
==3431== by 0x406D1F: test_evfilt_vnode (vnode.c:261)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c02d8 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x406642: test_kevent_vnode_note_write (vnode.c:116)
==3431== by 0x406D1F: test_evfilt_vnode (vnode.c:261)
==3431== by 0x402C87: main (main.c:198)
==3431==
34: test_kevent_vnode_note_attrib()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4066E2: test_kevent_vnode_note_attrib (vnode.c:129)
==3431== by 0x406D33: test_evfilt_vnode (vnode.c:262)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0428 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4066E2: test_kevent_vnode_note_attrib (vnode.c:129)
==3431== by 0x406D33: test_evfilt_vnode (vnode.c:262)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Invalid read of size 4
==3431== at 0x503F444: __pthread_mutex_unlock_usercnt
(pthread_mutex_unlock.c:37)
==3431== by 0x4E2EE78: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4066E2: test_kevent_vnode_note_attrib (vnode.c:129)
==3431== by 0x406D33: test_evfilt_vnode (vnode.c:262)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0410 is 80 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4066E2: test_kevent_vnode_note_attrib (vnode.c:129)
==3431== by 0x406D33: test_evfilt_vnode (vnode.c:262)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Invalid read of size 4
==3431== at 0x503F080: __pthread_mutex_unlock_full
(pthread_mutex_unlock.c:86)
==3431== by 0x4E2EE78: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4066E2: test_kevent_vnode_note_attrib (vnode.c:129)
==3431== by 0x406D33: test_evfilt_vnode (vnode.c:262)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0410 is 80 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4066E2: test_kevent_vnode_note_attrib (vnode.c:129)
==3431== by 0x406D33: test_evfilt_vnode (vnode.c:262)
==3431== by 0x402C87: main (main.c:198)
==3431==
35: test_kevent_vnode_note_rename()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4067EC: test_kevent_vnode_note_rename (vnode.c:149)
==3431== by 0x406D47: test_evfilt_vnode (vnode.c:263)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0578 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4067EC: test_kevent_vnode_note_rename (vnode.c:149)
==3431== by 0x406D47: test_evfilt_vnode (vnode.c:263)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Invalid read of size 4
==3431== at 0x503F444: __pthread_mutex_unlock_usercnt
(pthread_mutex_unlock.c:37)
==3431== by 0x4E2EE78: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4067EC: test_kevent_vnode_note_rename (vnode.c:149)
==3431== by 0x406D47: test_evfilt_vnode (vnode.c:263)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0560 is 80 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4067EC: test_kevent_vnode_note_rename (vnode.c:149)
==3431== by 0x406D47: test_evfilt_vnode (vnode.c:263)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Invalid read of size 4
==3431== at 0x503F080: __pthread_mutex_unlock_full
(pthread_mutex_unlock.c:86)
==3431== by 0x4E2EE78: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4067EC: test_kevent_vnode_note_rename (vnode.c:149)
==3431== by 0x406D47: test_evfilt_vnode (vnode.c:263)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0560 is 80 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x4067EC: test_kevent_vnode_note_rename (vnode.c:149)
==3431== by 0x406D47: test_evfilt_vnode (vnode.c:263)
==3431== by 0x402C87: main (main.c:198)
==3431==
36: test_kevent_vnode_note_delete()
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4065AB: test_kevent_vnode_note_delete (vnode.c:100)
==3431== by 0x406D5B: test_evfilt_vnode (vnode.c:264)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c06c8 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4065AB: test_kevent_vnode_note_delete (vnode.c:100)
==3431== by 0x406D5B: test_evfilt_vnode (vnode.c:264)
==3431== by 0x402C87: main (main.c:198)
==3431==
37: test_kevent_user_add_and_delete()
38: test_kevent_user_get()
39: test_kevent_user_get_hires()
40: test_kevent_user_disable_and_enable()
41: test_kevent_user_oneshot()
-- event 1
==3431== Invalid write of size 4
==3431== at 0x4E2EE6A: linux_kevent_copyout (platform.c:178)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4072CC: test_kevent_user_oneshot (user.c:109)
==3431== by 0x4075C9: test_evfilt_user (user.c:163)
==3431== by 0x402C87: main (main.c:198)
==3431== Address 0x57c0b68 is 104 bytes inside a block of size 160 free'd
==3431== at 0x4C240FD: free (vg_replace_malloc.c:366)
==3431== by 0x4E2C370: knote_delete (knote.c:117)
==3431== by 0x4E2EF81: linux_kevent_copyout (platform.c:176)
==3431== by 0x4E2D83E: kevent (kevent.c:294)
==3431== by 0x402E14: kevent_get (kevent.c:46)
==3431== by 0x4072CC: test_kevent_user_oneshot (user.c:109)
==3431== by 0x4075C9: test_evfilt_user (user.c:163)
==3431== by 0x402C87: main (main.c:198)
==3431==
42: test_kevent_user_dispatch()
43: test_ev_receipt()
---
+OK All 43 tests completed.
==3431==
==3431== FILE DESCRIPTORS: 10 open at exit.
==3431== Open file descriptor 12:
==3431== at 0x55282CD: signalfd (signalfd.c:30)
==3431== by 0x4E2F751: evfilt_signal_knote_create (signal.c:65)
==3431== by 0x4E2D598: kevent (kevent.c:149)
==3431== by 0x402A5E: test_ev_receipt (main.c:115)
==3431== by 0x402CA7: main (main.c:201)
==3431==
==3431== Open file descriptor 6: /tmp/kqueue-test1.tmp
==3431== at 0x5043820: __open_nocancel (syscall-template.S:82)
==3431== by 0x406484: test_kevent_vnode_add (vnode.c:82)
==3431== by 0x406CCF: test_evfilt_vnode (vnode.c:255)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Open AF_INET socket 9: 127.0.0.1:44554 <-> 127.0.0.1:14973
==3431== at 0x55290D7: socket (syscall-template.S:82)
==3431== by 0x4049F2: test_kevent_socket_listen_backlog (read.c:271)
==3431== by 0x4050E4: test_evfilt_read (read.c:424)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Open AF_INET socket 8: <unbound> <-> unbound
==3431== at 0x55290D7: socket (syscall-template.S:82)
==3431== by 0x4048DC: test_kevent_socket_listen_backlog (read.c:256)
==3431== by 0x4050E4: test_evfilt_read (read.c:424)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Open AF_INET socket 5: <unbound> <-> unbound
==3431== at 0x55290D7: socket (syscall-template.S:82)
==3431== by 0x403B39: create_socket_connection (read.c:39)
==3431== by 0x40502A: test_evfilt_read (read.c:411)
==3431== by 0x402C87: main (main.c:198)
==3431==
==3431== Open file descriptor 4:
==3431== at 0x5528567: epoll_create (syscall-template.S:82)
==3431== by 0x4E2F3EA: linux_kqueue_init (platform.c:45)
==3431== by 0x4E2DF53: kqueue (kqueue.c:123)
==3431== by 0x402C18: main (main.c:193)
==3431==
==3431== Open AF_UNIX socket 3: <unknown>
==3431== at 0x552910A: socketpair (syscall-template.S:82)
==3431== by 0x40275C: test_peer_close_detection (main.c:72)
==3431== by 0x402BFA: main (main.c:189)
==3431==
==3431== Open file descriptor 2: /dev/pts/0
==3431== <inherited from parent>
==3431==
==3431== Open file descriptor 1: /dev/pts/0
==3431== <inherited from parent>
==3431==
==3431== Open file descriptor 0: /dev/pts/0
==3431== <inherited from parent>
==3431==
==3431==
==3431== HEAP SUMMARY:
==3431== in use at exit: 24,992 bytes in 5 blocks
==3431== total heap usage: 78 allocs, 73 frees, 31,062 bytes allocated
==3431==
==3431== 16 bytes in 1 blocks are still reachable in loss record 1 of 5
==3431== at 0x4C2380C: calloc (vg_replace_malloc.c:467)
==3431== by 0x4E2CA74: map_new (map.c:29)
==3431== by 0x4E2E0FF: libkqueue_init (kqueue.c:77)
==3431== by 0x4E31C75: ??? (in
/home/mheily/proj/libkqueue/trunk/libkqueue.so.0.0)
==3431== by 0x4E2A822: ??? (in
/home/mheily/proj/libkqueue/trunk/libkqueue.so.0.0)
==3431==
==3431== 160 bytes in 1 blocks are still reachable in loss record 2 of 5
==3431== at 0x4C2380C: calloc (vg_replace_malloc.c:467)
==3431== by 0x4E2C01F: knote_new (knote.c:45)
==3431== by 0x4E2D53C: kevent (kevent.c:140)
==3431== by 0x402A5E: test_ev_receipt (main.c:115)
==3431== by 0x402CA7: main (main.c:201)
==3431==
==3431== 8,272 bytes in 1 blocks are still reachable in loss record 3 of 5
==3431== at 0x4C2380C: calloc (vg_replace_malloc.c:467)
==3431== by 0x4E2DF21: kqueue (kqueue.c:117)
==3431== by 0x402C18: main (main.c:193)
==3431==
==3431== 8,272 bytes in 1 blocks are still reachable in loss record 4 of 5
==3431== at 0x4C2380C: calloc (vg_replace_malloc.c:467)
==3431== by 0x4E2DF21: kqueue (kqueue.c:117)
==3431== by 0x4029A3: test_ev_receipt (main.c:110)
==3431== by 0x402CA7: main (main.c:201)
==3431==
==3431== 8,272 bytes in 1 blocks are definitely lost in loss record 5 of 5
==3431== at 0x4C2380C: calloc (vg_replace_malloc.c:467)
==3431== by 0x4E2DF21: kqueue (kqueue.c:117)
==3431== by 0x4028E5: test_kqueue (main.c:97)
==3431== by 0x402C0E: main (main.c:191)
==3431==
==3431== LEAK SUMMARY:
==3431== definitely lost: 8,272 bytes in 1 blocks
==3431== indirectly lost: 0 bytes in 0 blocks
==3431== possibly lost: 0 bytes in 0 blocks
==3431== still reachable: 16,720 bytes in 4 blocks
==3431== suppressed: 0 bytes in 0 blocks
==3431==
==3431== For counts of detected and suppressed errors, rerun with: -v
==3431== ERROR SUMMARY: 34 errors from 20 contexts (suppressed: 4 from 4)
This is fixed in r505, and I added some sanity checks to knote_lock() and
knote_unlock() that have exposed some additional problems on Windows.. my
guess is that Solaris will have some lock-related issues as well.
The underlying problem was that after calling knote_delete(), the knote
pointer becomes invalid so you should not call knote_unlock() anymore.
- Mark
Assertion failed: (&kn->kn_mtx)->mtx_status == (1), file src/common/knote.c, line 168, function knote_disable
(called from solaris_kevent_copyout) - need to review it - btw, on a related note, I also saw that an rwlock was used in the knote implementation, might be worthwhile benchmarking vs. a common mutex instead (see http://blogs.oracle.com/roch/entry/beware_of_the_performance_of for some background - as the code under the read lock seems quite small - we have seen unexpected results for this...)
Will be a little while before I will have time to have a look at it, but the current trunk is definitely broken on Solaris.
Joakim
> --
> You received this message because you are subscribed to the Google Groups "libkqueue" group.
> To post to this group, send email to libk...@googlegroups.com.
> To unsubscribe from this group, send email to libkqueue+...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/libkqueue?hl=en.
>
I just realized that the tracing_mutex implementation is missing a key
ingredient: a mechanism to track lock ownership on a per-thread basis.
Without this feature, the assertions may fail under the following conditions:
Thread A Thread B
mutex_lock(&m);
mutex_assert(&m, MTX_UNLOCKED);
mutex_unlock(&m);
> (called from solaris_kevent_copyout) - need to review it - btw, on a
> related note, I also saw that an rwlock was used in the knote
> implementation, might be worthwhile benchmarking vs. a common mutex
> instead
> (seehttp://blogs.oracle.com/roch/entry/beware_of_the_performance_of for
> some background - as the code under the read lock seems quite small - we
> have seen unexpected results for this...)
>
You may be right, but let me explain why I chose a rwlock. The lock is
protecting the traversal of a red-black tree. This is a self-balancing data
structure, so insertions/deletions can cause additional operations to
reorder the elements and update the "color". Operations on this data
structure are O(log n) so for large values of "n" we may be performing a
non-trivial amount of work. On the other hand, for small values of "n" the
cost of an rwlock may outweigh the benefits.
Regards,
- Mark
It’s true, but a knote lock was missing for the Solaris implementation to work regardless, should be fixed in r511… No longer fails with that assertion, testing continues…
> You may be right, but let me explain why I chose a rwlock. The lock is protecting the traversal of a red-black tree. This is a self-balancing data structure, so insertions/deletions can cause additional operations to reorder the elements and update the "color". Operations on this data structure are O(log n) so for large values of "n" we may be performing a non-trivial amount of work. On the other hand, for small values of "n" the cost of an rwlock may outweigh the benefits.
Right - I think it might be worthwhile measuring at some point (my experience is that the threshold is much farther away than one would expect, at least on Solaris…).
Joakim