The branch, master has been updated
       via  c9a7a06 lib/pthreadpool: fix a memory leak
      from  49c9ef64 objectclass_attrs: Remove schema copy shallow from 
attr_handler2

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c9a7a065bb5ec09286fef8b52b4fd23a966a94a8
Author: Ralph Boehme <[email protected]>
Date:   Thu Mar 9 19:49:56 2017 +0100

    lib/pthreadpool: fix a memory leak
    
    When copying large files from the server to the client with aio enabled
    we noticed that smbd kept growing RSS and VSZ.
    
    valgrind was reporting:
    
    ==2503== 4,093,440 bytes in 6,560 blocks are possibly lost in loss record 
460 of 460
    ==2503==    at 0x4C299CE: calloc (vg_replace_malloc.c:711)
    ==2503==    by 0x4011C24: _dl_allocate_tls (in /usr/lib64/ld-2.17.so)
    ==2503==    by 0x4E3C960: pthread_create@@GLIBC_2.2.5 (in 
/usr/lib64/libpthread-2.17.so)
    ==2503==    by 0x9B298AE: pthreadpool_add_job (in 
/usr/lib64/samba/libmessages-dgm-samba4.so)
    ==2503==    by 0x9B29FDC: pthreadpool_tevent_job_send (in 
/usr/lib64/samba/libmessages-dgm-samba4.so)
    ==2503==    by 0x56A78EF: ??? (in /usr/lib64/samba/libsmbd-base-samba4.so)
    ==2503==    by 0x55D86B7: smb_vfs_call_pread_send (in 
/usr/lib64/samba/libsmbd-base-samba4.so)
    ==2503==    by 0x55F7543: schedule_smb2_aio_read (in 
/usr/lib64/samba/libsmbd-base-samba4.so)
    ==2503==    by 0x5608F57: smbd_smb2_request_process_read (in 
/usr/lib64/samba/libsmbd-base-samba4.so)
    ==2503==    by 0x55FCB6C: smbd_smb2_request_dispatch (in 
/usr/lib64/samba/libsmbd-base-samba4.so)
    ==2503==    by 0x55FD7DC: ??? (in /usr/lib64/samba/libsmbd-base-samba4.so)
    ==2503==    by 0x641B977: ??? (in /usr/lib64/samba/libtevent.so.0.9.31)
    
    The problem seems to be caused by worked threads that are not properly
    started in detached state and thus their tls is not reclaimed upon
    thread termination.
    
    In pthreadpool.c we prepare a pthread attribute with
    PTHREAD_CREATE_DETACHED, but we don't pass it to pthread_create().
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=12624
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Volker Lendecke <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>
    
    Autobuild-User(master): Ralph Böhme <[email protected]>
    Autobuild-Date(master): Fri Mar 10 22:06:02 CET 2017 on sn-devel-144

-----------------------------------------------------------------------

Summary of changes:
 lib/pthreadpool/pthreadpool.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


Changeset truncated at 500 lines:

diff --git a/lib/pthreadpool/pthreadpool.c b/lib/pthreadpool/pthreadpool.c
index eaddd44..f97cdcc 100644
--- a/lib/pthreadpool/pthreadpool.c
+++ b/lib/pthreadpool/pthreadpool.c
@@ -534,7 +534,7 @@ int pthreadpool_add_job(struct pthreadpool *pool, int 
job_id,
                return res;
        }
 
-       res = pthread_create(&thread_id, NULL, pthreadpool_server,
+       res = pthread_create(&thread_id, &thread_attr, pthreadpool_server,
                             (void *)pool);
        if (res == 0) {
                pool->num_threads += 1;


-- 
Samba Shared Repository

Reply via email to