#
# This is a valgrind suppression file that should be used when using valgrind.
#
#  Here's an example of running valgrind:
#
#       cd python/dist/src
#       valgrind --tool=memcheck --suppressions=Misc/valgrind-python.supp \
#               ./python -E -tt ./Lib/test/regrtest.py -u bsddb,network
#
# You must edit Objects/obmalloc.c and uncomment Py_USING_MEMORY_DEBUGGER
# to use the preferred suppressions with Py_ADDRESS_IN_RANGE.
#
# If you do not want to recompile Python, you can uncomment
# suppressions for PyObject_Free and PyObject_Realloc.
#
# See Misc/README.valgrind for more information.

# all tool names: Addrcheck,Memcheck,cachegrind,helgrind,massif
{
   ADDRESS_IN_RANGE/Invalid read of size 4
   Memcheck:Addr4
   fun:Py_ADDRESS_IN_RANGE
}

{
   ADDRESS_IN_RANGE/Invalid read of size 4
   Memcheck:Value4
   fun:Py_ADDRESS_IN_RANGE
}

{
   ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64 aka amd64)
   Memcheck:Value8
   fun:Py_ADDRESS_IN_RANGE
}

{
   ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value
   Memcheck:Cond
   fun:Py_ADDRESS_IN_RANGE
}

#
# Leaks (including possible leaks)
#    Hmmm, I wonder if this masks some real leaks.  I think it does.
#    Will need to fix that.
#

{
   Suppress leaking the GIL.  Happens once per process, see comment in ceval.c.
   Memcheck:Leak
   fun:malloc
   fun:PyThread_allocate_lock
   fun:PyEval_InitThreads
}
{
   Suppress leaking the GIL.  Happens once per process, see comment in ceval.c.
   Memcheck:Leak
   fun:malloc
   fun:PyThread_allocate_lock
   fun:PyThread_create_key
}

{
   Suppress leaking the GIL after a fork.
   Memcheck:Leak
   fun:malloc
   fun:PyThread_allocate_lock
   fun:PyEval_ReInitThreads
}

{
   Suppress leaking the GIL after a fork.
   Memcheck:Leak
   fun:malloc
   fun:PyThread_allocate_lock
   fun:PyImport_ImportModuleLevel
}

{
   <insert_a_suppression_name_here>
   Memcheck:Addr4
   fun:PyObject_Free
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyImport_ImportModuleLevel
}

{
   Suppress leaking the autoTLSkey.  This looks like it shouldn't leak though.
   Memcheck:Leak
   fun:malloc
   fun:PyThread_create_key
   fun:_PyGILState_Init
   fun:Py_InitializeEx
   fun:Py_Main
}

{
   Hmmm, is this a real leak or like the GIL?
   Memcheck:Leak
   fun:malloc
   fun:PyThread_ReInitTLS
}

{
   Handle PyMalloc confusing valgrind (possibly leaked)
   Memcheck:Leak
   fun:realloc
   fun:_PyObject_GC_Resize
   fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING
}

{
   Handle PyMalloc confusing valgrind (possibly leaked)
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_New
   fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING
}

{
   Handle PyMalloc confusing valgrind (possibly leaked)
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_NewVar
   fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING
}
{
   Something inside posix (not leak)
   Memcheck:Leak
   fun:malloc
   fun:PyFloat_FromDouble
   fun:_pystat_fromstructstat
}
{
   Something inside posix (not leak)
   Memcheck:Leak
   fun:malloc
   fun:PyFloat_FromDouble
   obj:/usr/lib*/libpython*.so*
}
{
   Something inside posix (not leak)
   Memcheck:Leak
   fun:malloc
   fun:PyFloat_FromDouble
   obj:/usr/bin/python*
}

#
# Non-python specific leaks
#

{
   Handle pthread issue (possibly leaked)
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate_tls_storage
   fun:_dl_allocate_tls
}

{
   Handle pthread issue (possibly leaked)
   Memcheck:Leak
   fun:memalign
   fun:_dl_allocate_tls_storage
   fun:_dl_allocate_tls
}

{
   ADDRESS_IN_RANGE/Invalid read of size 4
   Memcheck:Addr4
   fun:PyObject_Free
}

{
   ADDRESS_IN_RANGE/Invalid read of size 4
   Memcheck:Value4
   fun:PyObject_Free
}

{
   GAMMU/Use of uninitialised value of size 8, probably amd64 version of above
   Memcheck:Value8
   fun:PyObject_Free
}

{
   ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value
   Memcheck:Cond
   fun:PyObject_Free
}

{
   ADDRESS_IN_RANGE/Invalid read of size 4
   Memcheck:Addr4
   fun:PyObject_Realloc
}

{
   ADDRESS_IN_RANGE/Invalid read of size 4
   Memcheck:Value4
   fun:PyObject_Realloc
}

{
   ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value
   Memcheck:Cond
   fun:PyObject_Realloc
}

###
### All the suppressions below are for errors that occur within libraries
### that Python uses.  The problems to not appear to be related to Python's
### use of the libraries.
###

{
   Generic ubuntu ld problems
   Memcheck:Addr8
   obj:/lib*/ld-2.4.so
   obj:/lib*/ld-2.4.so
   obj:/lib*/ld-2.4.so
   obj:/lib*/ld-2.4.so
}

{
   Generic gentoo ld problems
   Memcheck:Cond
   obj:/lib*/ld-2.3.4.so
   obj:/lib*/ld-2.3.4.so
   obj:/lib*/ld-2.3.4.so
   obj:/lib*/ld-2.3.4.so
}

{
   DBM problems, see test_dbm
   Memcheck:Param
   write(buf)
   fun:write
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   fun:dbm_close
}

{
   DBM problems, see test_dbm
   Memcheck:Value8
   fun:memmove
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   fun:dbm_store
   fun:dbm_ass_sub
}

{
   DBM problems, see test_dbm
   Memcheck:Cond
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   fun:dbm_store
   fun:dbm_ass_sub
}

{
   DBM problems, see test_dbm
   Memcheck:Cond
   fun:memmove
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   obj:/usr/lib*/libdb1.so.2
   fun:dbm_store
   fun:dbm_ass_sub
}

{
   GDBM problems, see test_gdbm
   Memcheck:Param
   write(buf)
   fun:write
   fun:gdbm_open

}

{
   ZLIB problems, see test_gzip
   Memcheck:Cond
   obj:/lib*/libz.so.1.2.3
   obj:/lib*/libz.so.1.2.3
   fun:deflate
}

{
   Avoid problems w/readline doing a putenv and leaking on exit
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:sh_set_lines_and_columns
   fun:_rl_get_screen_size
   fun:_rl_init_terminal_io
   obj:/lib*/libreadline.so.4.3
   fun:rl_initialize
}

###
### These occur from somewhere within the SSL, when running
###  test_socket_sll.  They are too general to leave on by default.
###
###{
###   somewhere in SSL stuff
###   Memcheck:Cond
###   fun:memset
###}
###{
###   somewhere in SSL stuff
###   Memcheck:Value4
###   fun:memset
###}
###
###{
###   somewhere in SSL stuff
###   Memcheck:Cond
###   fun:MD5_Update
###}
###
###{
###   somewhere in SSL stuff
###   Memcheck:Value4
###   fun:MD5_Update
###}

#
# All of these problems come from using test_socket_ssl
#
{
   from test_socket_ssl
   Memcheck:Cond
   fun:BN_bin2bn
}

{
   from test_socket_ssl
   Memcheck:Cond
   fun:BN_num_bits_word
}

{
   from test_socket_ssl
   Memcheck:Value4
   fun:BN_num_bits_word
}

{
   from test_socket_ssl
   Memcheck:Cond
   fun:BN_mod_exp_mont_word
}

{
   from test_socket_ssl
   Memcheck:Cond
   fun:BN_mod_exp_mont
}

{
   from test_socket_ssl
   Memcheck:Param
   write(buf)
   fun:write
   obj:/usr/lib*/libcrypto.so.0.9.7
}

{
   from test_socket_ssl
   Memcheck:Cond
   fun:RSA_verify
}

{
   from test_socket_ssl
   Memcheck:Value4
   fun:RSA_verify
}

{
   from test_socket_ssl
   Memcheck:Value4
   fun:DES_set_key_unchecked
}

{
   from test_socket_ssl
   Memcheck:Value4
   fun:DES_encrypt2
}

{
   from test_socket_ssl
   Memcheck:Cond
   obj:/usr/lib*/libssl.so.0.9.7
}

{
   from test_socket_ssl
   Memcheck:Value4
   obj:/usr/lib*/libssl.so.0.9.7
}

{
   from test_socket_ssl
   Memcheck:Cond
   fun:BUF_MEM_grow_clean
}

{
   from test_socket_ssl
   Memcheck:Cond
   fun:memcpy
   fun:ssl3_read_bytes
}

{
   from test_socket_ssl
   Memcheck:Cond
   fun:SHA1_Update
}

{
   from test_socket_ssl
   Memcheck:Value4
   fun:SHA1_Update
}


# Leaks 
{
   6 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:strdup
   fun:Py_InitializeEx
}

{
   8 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyList_New
   fun:do_mkvalue
   fun:va_build_value
   fun:Py_BuildValue
   fun:PyImport_Import
   fun:PyImport_ImportModule
   fun:_PyExc_Init
   fun:Py_InitializeEx
}

{
   4 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyList_New
   obj:/usr/bin/python*
}

{
   8 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyList_New
   obj:/usr/lib*/libpython*.so.*
}

{
   96 bytes in 3 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyThread_allocate_lock
   fun:PyInterpreterState_New
   fun:Py_InitializeEx
}
{
   96 bytes in 3 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyThread_allocate_lock
   fun:lock_import
}

{
   108 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:calculate_path
   fun:Py_GetProgramFullPath
}

{
   108 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:Py_GetProgramFullPath
}

{
   138 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libpython*.so.*
   fun:Py_GetProgramFullPath
}

{
   456 bytes in 4 blocks are still reachable
   Memcheck:Leak
   fun:realloc
   fun:PyList_Append
}
{
   456 bytes in 4 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:PyList_Append
}

{
   536 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_NewVar
   fun:PyFrame_New
}

{
   23,296 bytes in 81 blocks are possibly lost
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:_PyObject_GC_NewVar
   fun:PyFrame_New
}

{
   Dont know ;-)
   Memcheck:Leak
   fun:malloc
   fun:fill_free_list
   fun:PyInt_FromLong
   fun:analyze_block
}
{
   Dont know ;-)
   Memcheck:Leak
    fun:malloc
    fun:PyObject_Malloc
    fun:PyNode_AddChild
    fun:PyParser_AddToken
    fun:parsetok
}
{
   Dont know ;-)
   Memcheck:Leak
   fun:malloc
   fun:fill_free_list
   fun:PyInt_FromLong
   fun:symtable_enter_block
}

{
   992 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:_PyInt_Init
   fun:Py_InitializeEx
}

{
   1,984 bytes in 2 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libpython*.so.*
   fun:_PyInt_Init
}

{
   1,000 bytes in 2 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyString_FromString
   fun:initposix
}
{
   1,000 bytes in 2 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyString_FromStringAndSize
   fun:initposix
}
{
   1,000 bytes in 2 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyStructSequence_InitType
   fun:initposix
}
{
   992 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:fill_free_list
   fun:PyInt_FromLong
   fun:setup_confname_table
   fun:initposix
}
{
   992 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyString_FromString
   fun:PyDict_SetItemString
   fun:PyModule_AddObject
   fun:initposix
}
{
   992 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyString_FromString
   fun:PyString_InternFromString
   fun:PyDescr_NewMember
   fun:PyType_Ready
   fun:initdatetime
}
{
   992 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   fun:PyDescr_NewMethod
   fun:PyType_Ready
   fun:initdatetime
}
{
   1,344 bytes in 19 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_NewVar
   fun:PyTuple_New
}

{
    400 bytes in 1 blocks are still reachable
    Memcheck:Leak
    fun:malloc
    fun:PyStructSequence_InitType
    fun:inittime
}
{
   1,372 bytes in 5 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:_PyObject_GC_NewVar
   fun:PyTuple_New
   fun:r_object
}
{
   1,372 bytes in 5 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyString_FromStringAndSize
   fun:r_object
}
{
   1,372 bytes in 5 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyString_FromStringAndSize
   fun:r_object
}
{
   1,372 bytes in 5 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyString_FromStringAndSize
   fun:r_object
}
{
   1,372 bytes in 5 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:fill_free_list
   fun:PyInt_FromLong
   fun:r_object
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyString_InternInPlace
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyMarshal_ReadLastObjectFromFile
   obj:/usr/bin/python*
}

{
   535 bytes in 2 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyString_FromStringAndSize
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyMarshal_ReadLastObjectFromFile
   obj:/usr/bin/python*
}

{
   1,372 bytes in 5 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyString_FromStringAndSize
   obj:/usr/lib*/libpython*.so.*
   obj:/usr/lib*/libpython*.so.*
   obj:/usr/lib*/libpython*.so.*
   obj:/usr/lib*/libpython*.so.*
   obj:/usr/lib*/libpython*.so.*
   obj:/usr/lib*/libpython*.so.*
   fun:PyMarshal_ReadObjectFromString
   fun:PyMarshal_ReadLastObjectFromFile
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyString_FromStringAndSize
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyMarshal_ReadLastObjectFromFile
}
{
   3,072 bytes in 7 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyString_FromString
}

{
   11,760 bytes in 42 blocks are possibly lost
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_New
   fun:PyDict_New
}

{
   14,896 bytes in 51 blocks are possibly lost
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:_PyObject_GC_New
   fun:PyDict_New
}

{
   11,760 bytes in 42 blocks are possibly lost
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_New
   fun:PyTuple_New
}

{
   524,288 bytes in 2 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_NewVar
   fun:PyTuple_New
}

{
   1,376 bytes in 20 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_Malloc
   fun:_PyObject_GC_NewVar
   fun:PyTuple_New
}

{
   786,432 bytes in 3 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_Malloc
   fun:_PyObject_GC_NewVar
   fun:PyTuple_New
}

{
   11,960 bytes in 13 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   fun:partial_new
   fun:type_call
}
{
   11,960 bytes in 13 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   fun:type_new
   fun:type_call
}
{
   11,960 bytes in 13 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:type_new
   fun:type_call
}
{
   11,960 bytes in 13 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:newblock
   fun:deque_new
   fun:type_call
}
{
   11,960 bytes in 13 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   fun:type_new
   fun:tp_new_wrapper
}

{
   262,144 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   fun:descr_new
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   fun:descr_new
}
{
   11,960 bytes in 13 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   fun:descr_new
}
{
   11,960 bytes in 13 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:fill_free_list
   fun:PyInt_FromLong
   fun:do_mkvalue
   fun:do_mktuple
   fun:va_build_value
   fun:Py_BuildValue
   fun:zipimporter_init
}

{
   35,112 bytes in 77 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunction
   fun:PyErr_NewException
   fun:initzipimport
}

{
   260,736 bytes in 35 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   fun:dictresize
}

{
   16 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   obj:/lib*/ld-2.7.so
}

{
   32 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:calloc
   obj:/lib*/libdl-2.7.so
}

{
   32 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:calloc
   obj:/lib*/libdl-2.8.so
}

{
   648 bytes in 4 blocks are still reachable
   Memcheck:Leak
   fun:calloc
   obj:/lib*/ld-2.7.so
}

{
   480 bytes in 3 blocks are still reachable
   Memcheck:Leak
   fun:calloc
   obj:/lib*/ld-2.8.so
}

{
   32 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   obj:/lib*/ld-2.8.so
}

{
   Use of uninitialised value of size 8
   Memcheck:Value8
   fun:PyObject_Realloc
}

{
   988 bytes in 1 blocks are still reachable
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyInt_FromLong
   obj:/usr/bin/python*
   fun:PySymtable_Build
   fun:PyAST_Compile
   fun:PyRun_FileExFlags
   fun:PyRun_SimpleFileExFlags
   fun:Py_Main
   fun:main
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyString_InternInPlace
   fun:PyString_FromStringAndSize
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   fun:PyEval_EvalCode
   fun:PyImport_ExecCodeModuleEx
   obj:/usr/bin/python*
   obj:/usr/bin/python*
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_New
   fun:PyFunction_New
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   fun:PyEval_EvalCode
   fun:PyImport_ExecCodeModuleEx
   obj:/usr/bin/python*
   obj:/usr/bin/python*
}

{
   1 bytes in 1 blocks are still reachable in loss record 1 of 31
   Memcheck:Leak
   fun:realloc
   fun:list_resize
   fun:listpop
   fun:PyEval_EvalFrameEx
}
{
   1 bytes in 1 blocks are still reachable in loss record 1 of 31
   Memcheck:Leak
   fun:realloc
   fun:list_resize
   fun:ins1
   fun:listinsert
   fun:PyEval_EvalFrameEx
}
{
   1 bytes in 1 blocks are still reachable in loss record 1 of 31
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:app1
   fun:listappend
   fun:PyEval_EvalFrameEx
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:type_new
   fun:tp_new_wrapper
   fun:PyEval_EvalFrameEx
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
}
{
   1 bytes in 1 blocks are still reachable in loss record 1 of 31
   Memcheck:Leak
   fun:realloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
}

{
   349 bytes in 1 blocks are still reachable in loss record 10 of 31
   Memcheck:Leak
   fun:realloc
   fun:_PyString_Resize
   fun:PyString_Format
}
{
   420 bytes in 1 blocks are still reachable in loss record 11 of 29
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
}

{
   464 bytes in 1 blocks are still reachable in loss record 11 of 31
   Memcheck:Leak
   fun:malloc
   fun:_compile
   fun:PyEval_EvalFrameEx
}
{
   464 bytes in 1 blocks are still reachable in loss record 10 of 26
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libpython*.so.*
   fun:PyEval_EvalFrameEx
}

{
   992 bytes in 1 blocks are still reachable in loss record 15 of 31
   Memcheck:Leak
   fun:malloc
   fun:fill_free_list
   fun:PyInt_FromLong
   fun:PyModule_AddIntConstant
   fun:init_locale
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunction
   fun:PyErr_NewException
   fun:init_locale
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_Malloc
   fun:_PyObject_GC_New
   fun:PyInstance_NewRaw
   fun:PyInstance_New
   fun:PyObject_Call
}
{
   988 bytes in 1 blocks are still reachable in loss record 18 of 29
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyInt_FromLong
   obj:/usr/bin/python*
}

### This is a CURL bug on SUSE 11.0
{
   Leak from curl_init
   Memcheck:Leak
   fun:malloc
   fun:CRYPTO_malloc
}
{
   Leak from crypt
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   fun:gnutls_global_init
   obj:/usr/lib*/libcurl*.so.*
   fun:curl_global_init
}
{
   Leak from crypt
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgnutls.so.*
   obj:/usr/lib*/libgnutls.so.*
   obj:gcry_check_version
   fun:gnutls_global_init
   obj:/usr/lib*/libcurl*.so.*
   fun:curl_global_init
}
{
   Leak from crypt
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgnutls.so.*
   obj:/usr/lib*/libgnutls.so.*
   fun:gnutls_global_init
   obj:/usr/lib*/libcurl*.so.*
   fun:curl_global_init
}
{
   Leak from crypt
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   fun:gcry_create_nonce
   obj:/usr/lib*/libgnutls.so.*
   obj:/usr/lib*/libgnutls.so.*
   fun:gnutls_global_init
   obj:/usr/lib*/libcurl*.so.*
   obj:/usr/lib*/libcurl*.so.*
   fun:curl_global_init
}

{
   Leak from crypt
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   obj:/usr/lib*/libgcrypt.so.*
   fun:gcry_check_version
   fun:gnutls_global_init
   obj:/usr/lib*/libcurl*.so.*
   obj:/usr/lib*/libcurl*.so.*
   fun:curl_global_init
}

# libdbi
{
   Leak from dbi/dlopen
   Memcheck:Leak
   fun:calloc
   obj:/lib*/libdl-*.so
   fun:dlopen
   fun:dbi_initialize
}
{
   Leak from dbi/dlopen
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlopen
   fun:dbi_initialize
}
{
   Leak from dbi/dlopen
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:dbi_initialize
}
{
   Leak from dbi/dlopen
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:dbi_initialize
}

# Shell suppressions, /bin/sh is used for smsd testing
{
   Bash-1
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:set_signal
   fun:trap_builtin
   fun:execute_builtin
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:make_variable_value
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:set_lang
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:array_create_element
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:make_bare_word
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   obj:/bin/bash
}
{
   Bash-x
   Memcheck:Leak
   fun:realloc
   fun:xrealloc
   obj:/bin/bash
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xrealloc
   obj:/bin/bash
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xrealloc
   fun:push_dollar_vars
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:hash_create
}
{
   Bash-x
   Memcheck:Leak
   fun:realloc
   fun:xrealloc
   fun:maybe_make_export_env
}
{
   Bash-x
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:cmd_init
}
{
   Bash-2
   Memcheck:Leak
   fun:realloc
   fun:xrealloc
   fun:maybe_make_export_env
   fun:execute_simple_command
}
{
   Bash-3
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:set_default_locale
   fun:main
}
{
   Bash-4
   Memcheck:Leak
   fun:malloc
   fun:xrealloc
   fun:shell_getc
   fun:read_token
   fun:yyparse
   fun:parse_command
}
{
   Bash-5
   Memcheck:Leak
   fun:realloc
   fun:xrealloc
   fun:maybe_make_export_env
   fun:execute_simple_command
}
{
   Bash-6
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:make_word_list
   fun:copy_word_list
   fun:expand_word_list_internal
   fun:execute_simple_command
}
{
   Bash-7
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:make_if_command
}
{
   Bash-8
   Memcheck:Leak
   fun:realloc
   fun:xrealloc
   fun:cprintf
   fun:print_redirection_list
}
{
   Bash-9
   Memcheck:Leak
   fun:malloc
   fun:xrealloc
   fun:read_token
   fun:yyparse
   fun:parse_command
}
{
   Bash-10
   Memcheck:Leak
   fun:malloc
   fun:xmalloc
   fun:fd_to_buffered_stream
}
{
   Bash-11
   Memcheck:Leak
   fun:malloc
   fun:xrealloc
   fun:fd_to_buffered_stream
}
{
   Dash-1
   Memcheck:Leak
   fun:malloc
   fun:strdup
   obj:/bin/dash
}
{
   Dash-2
   Memcheck:Leak
   fun:malloc
   obj:/bin/dash
}
{
   Dash-3
   Memcheck:Leak
   fun:malloc
   fun:realloc
   obj:/bin/dash
}

{
   Some curl leak
   Memcheck:Leak
   fun:malloc
   fun:inet_ntoa
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   fun:GSM_ReadHTTPFile
}

{
   Some curl leak
   Memcheck:Leak
   fun:malloc
   fun:inet_ntoa
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   obj:/usr/lib*/libcurl-gnutls.so.4.1.0
   fun:curl_easy_perform
   fun:GSM_ReadHTTPFile
}
# Python * + libc 2.9
{
   dyload
   Memcheck:Leak
   fun:calloc
   obj:/lib*/libdl-2.9.so
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   dyload
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run 
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}

{
   import
   Memcheck:Leak
   fun:malloc
   fun:PyList_New
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:Py_BuildValue
   fun:PyImport_Import
}
{
   dynload2
   Memcheck:Leak
   fun:malloc
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   dynload2
   Memcheck:Leak
   fun:malloc
   fun:local_strdup
   fun:_dl_map_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   dynload2
   Memcheck:Leak
   fun:malloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   dynload2
   Memcheck:Leak
   fun:malloc
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}

{
   dynload2
   Memcheck:Leak
   fun:malloc
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   dynload3
   Memcheck:Leak
   fun:malloc
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   dynload4
   Memcheck:Leak
   fun:malloc
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   dynload5
   Memcheck:Leak
   fun:calloc
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   dynload6
   Memcheck:Leak
   fun:calloc
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   obj:/lib*/ld-2.9.so
   obj:/lib*/libdl-2.9.so
   fun:dlopen
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:calloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:calloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:calloc
   fun:_dl_check_map_versions
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:local_strdup
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:local_strdup
   fun:_dl_map_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:decompose_rpath
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
   fun:_PyImport_GetDynLoadFunc
}
{
   marshal
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyInt_FromLong
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyMarshal_ReadLastObjectFromFile
}
{
   marshal2
   Memcheck:Leak
   fun:malloc
   fun:PyString_FromStringAndSize
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyMarshal_ReadLastObjectFromFile
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyString_FromStringAndSize
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyMarshal_ReadLastObjectFromFile
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyString_FromStringAndSize
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyMarshal_ReadLastObjectFromFile
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyCode_New
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyMarshal_ReadLastObjectFromFile
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:realloc
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
}
{
   execcodemodule
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunctionObjArgs
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   fun:PyEval_EvalCode
   fun:PyImport_ExecCodeModuleEx
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyDict_Merge
   fun:PyDict_Copy
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunctionObjArgs
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   fun:PyEval_EvalCode
   fun:PyImport_ExecCodeModuleEx
   obj:/usr/bin/python*
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunctionObjArgs
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   fun:PyEval_EvalCode
   fun:PyImport_ExecCodeModuleEx
}
{
   float
   Memcheck:Leak
   fun:malloc
   fun:PyStructSequence_InitType
   fun:_PyFloat_Init
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyStructSequence_InitType
   fun:_PySys_Init
}
{
   sysinit
   Memcheck:Leak
   fun:malloc
   fun:PyFloat_GetInfo
   fun:_PySys_Init
}

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyDict_Merge
   fun:PyDict_Copy
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   obj:/usr/bin/python*
   fun:PyObject_Call
   obj:/usr/bin/python*
   obj:/usr/bin/python*
}

{
   path
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:Py_GetProgramFullPath
}
{
   zipimport
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunction
   fun:PyErr_NewException
   fun:initzipimport
}
{
   Some generic leak which happens in every module.
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyDict_SetItemString
   fun:PyType_Ready
}
{
   typeready
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyType_Ready
}
{
   typeready
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyString_FromString
   fun:PyString_InternFromString
   fun:PyDescr_NewMethod
   fun:PyType_Ready 
}
{
   typeready
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   fun:PyDescr_NewWrapper
   fun:PyType_Ready 
}
{
   1,112 bytes in 5 blocks are still reachable
   Memcheck:Leak
   fun:realloc
   obj:/usr/lib*/libpython*.so.*
   obj:/usr/lib*/libpython*.so.*
   obj:/usr/lib*/libpython*.so.*
   fun:PyType_Ready
}
{
   eval
   Memcheck:Leak
   fun:realloc
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
}
{
   eval2
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
}
{
   call
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_Call
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunctionObjArgs
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   fun:PyEval_EvalCode
   fun:PyImport_ExecCodeModuleEx
   obj:/usr/bin/python*
   obj:/usr/bin/python*
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   obj:/usr/bin/python*
   fun:PyObject_Call
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunctionObjArgs
}

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyDict_SetItemString
   obj:/usr/bin/python*
   fun:PyObject_GenericSetAttr
   obj:/usr/bin/python*
   fun:PyObject_SetAttr
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   obj:/usr/bin/python*
   fun:PyObject_Call
   obj:/usr/bin/python*
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyObject_GenericSetAttr
   obj:/usr/bin/python*
   fun:PyObject_SetAttr
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   obj:/usr/bin/python*
   fun:PyObject_Call
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunctionObjArgs
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyThread_allocate_lock
   fun:_PyImport_AcquireLock
   fun:PyImport_ImportModuleLevel
   fun:PyImport_Import
   fun:PyImport_ImportModule
   fun:_PyExc_Init
   fun:Py_InitializeEx
   fun:Py_Main
   fun:(below main)
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyDict_SetItemString
   fun:_PyBuiltin_Init
   fun:Py_InitializeEx
   fun:Py_Main
   fun:(below main)
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunction
   fun:PyErr_NewException
   fun:initsignal
   fun:PyOS_InitInterrupts
   fun:Py_InitializeEx
   fun:Py_Main
   fun:(below main)
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:PyObject_Malloc
   fun:PyString_FromString
   fun:PyDict_SetItemString
   fun:initsignal
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:_PyObject_GC_Malloc
   fun:PyType_GenericAlloc
   obj:/usr/bin/python*
   obj:/usr/bin/python*
   fun:PyObject_CallFunction
   fun:PyErr_NewException
   fun:init_struct
}
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:/usr/bin/python*
   fun:PyObject_SetAttr
   obj:/usr/bin/python*
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalFrameEx
   fun:PyEval_EvalCodeEx
   obj:/usr/bin/python*
   fun:PyObject_Call
   obj:/usr/bin/python*
   fun:PyObject_Call
   fun:PyEval_CallObjectWithKeywords
}


{
    mysql init
    Memcheck:Leak
    fun:malloc
    fun:my_malloc
    fun:my_error_register
    fun:mysql_server_init
    fun:mysql_init
}
{
    mysql init
    Memcheck:Leak
    fun:malloc
    fun:my_malloc
    fun:my_error_register
    fun:init_client_errs
    fun:mysql_server_init
    fun:mysql_init
}


{
    mysql init
    Memcheck:Leak
    fun:malloc
    fun:my_once_alloc
    obj:/usr/lib*/libmysqlclient.so*
    obj:/usr/lib*/libmysqlclient.so*
    fun:get_charset_by_csname
    fun:mysql_init_character_set
    fun:mysql_real_connect
}

# Following might actually be bug in python-gammu, but I really don't see what could be done better

{
    python-gammu exceptions
    Memcheck:Leak
    fun:malloc
    fun:PyObject_Malloc
    fun:PyString_FromStringAndSize
    fun:PyErr_NewException
    fun:gammu_create_errors
}
{
    python-gammu exceptions
    Memcheck:Leak
    fun:malloc
    fun:PyObject_Malloc
    fun:PyString_FromString
    fun:PyDict_SetItemString
    fun:gammu_create_errors
}
{
    python-gammu exceptions
    Memcheck:Leak
    fun:malloc
    fun:PyObject_Malloc
    fun:type_new
    fun:type_call
    fun:call_function_tail
    fun:PyObject_CallFunction
    fun:PyErr_NewException
    fun:gammu_create_errors
}
