Full_Name: Hallvard B Furuseth Version: 2.4.28, master OS: Linux x86_64 URL: http://folk.uio.no/hbf/toobig.sh Submission from: (NULL) (195.1.106.125) Submitted by: hallvard
slapadd hangs if bi_tool_entry_put() fails.
Tested with back-ldif patched for bi_tool_entry_put() to return NOID after 6 entries, and on master with mdb and an LDIF > DB maxsize.
Test program enclosed. Backtrace:
Thread 2 (Thread 0x7fb3745fd700 (LWP 31479)): #0 0x000000371fc0b3dc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #1 0x000000000048acaf in getrec_thr (ctx=<value optimized out>) at slapadd.c:296 #2 0x000000371fc077f1 in start_thread () from /lib64/libpthread.so.0
Thread 1 (Thread 0x7fb37542e7c0 (LWP 31478)): #0 0x000000371fc0804d in pthread_join () from /lib64/libpthread.so.0 #1 0x000000000048a8e5 in slapadd (argc=<value optimized out>, argv=<value optimized out>) at slapadd.c:454 #2 0x0000000000406ea5 in main (argc=5, argv=<value optimized out>) at main.c:655
I don't want to touch that code, don't remember why nearby code uses ldap_pvt_tread_yield() instead of the clean way of having two conds (one for producer and one for consumer to wait for).