# This is a real problem in the Solaris libc. It is caused by a read past the
# FILE structure. It's an intentional hack to differentiate between two file
# structures, FILE and xFILE.
{
   Solaris:sprintf
   Memcheck:Cond
   fun:getxfdat
   fun:_set_memstream
   fun:sprintf
}

# The same problem as above.
{
   Solaris:snprintf
   Memcheck:Cond
   fun:getxfdat
   fun:_set_memstream
   fun:snprintf
}

# The same problem as above.
{
   Solaris:snprintf
   Memcheck:Cond
   fun:getxfdat
   fun:_realbufend
   fun:_ndoprnt
   fun:snprintf
}

# The same problem as above.
{
   Solaris:vsnprintf
   Memcheck:Cond
   fun:getxfdat
   fun:_set_memstream
   fun:vsnprintf
}

# The same problem as above.
{
   Solaris:vsnprintf
   Memcheck:Cond
   fun:getxfdat
   fun:_realbufend
   fun:_ndoprnt
   fun:vsnprintf
}

#----------------------------------------------------------------------------#
# Solaris libc doesn't deallocate I/O buffers on program exit.
{
   Solaris:file_buffer_malloc
   Memcheck:Leak
   fun:malloc
   fun:_findbuf
   obj:/lib/libc.so.1
   obj:/lib/libc.so.1
}

#----------------------------------------------------------------------------#
# Solaris libc doesn't deallocate netconfig list pointed to by netpp. 
# This includes other allocated structures and strings contained there.
{
   Solaris:setnetconfig-fgetnetconfig
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:calloc
   fun:fgetnetconfig
   fun:getnetlist
   fun:setnetconfig
}

# The same problem as above.
{
   Solaris:setnetconfig-fgetnetconfig-getlookups-strdup
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:strdup
   fun:getlookups
   fun:fgetnetconfig
   fun:getnetlist
   fun:setnetconfig
}

# The same problem as above.
{
   Solaris:setnetconfig-fgetnetconfig-getlookups-malloc
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:getlookups
   fun:fgetnetconfig
   fun:getnetlist
   fun:setnetconfig
}

# The same problem as above.
{
   Solaris:setnetconfig-fgetnetconfig-gettoken
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:strdup
   fun:gettoken
   fun:fgetnetconfig
   fun:getnetlist
   fun:setnetconfig
}

# The same problem as above.
{
   Solaris:setnetconfig-getnetlist
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:getnetlist
   fun:setnetconfig
}

#----------------------------------------------------------------------------#
# Solaris libc doesn't deallocate static strings netid_tcp_main
# and netid_tcp_udp allocated in __rpc_getconfip.
{
   Solaris:__rpc_getconfip-netid_tcp+udp_main
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc
   fun:strdup
   fun:__rpc_getconfip
}

#----------------------------------------------------------------------------#
# Solaris libc doesn't deallocate global variable global_gt.
{
   Solaris:dgettext
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:calloc
   fun:dgettext
}

#----------------------------------------------------------------------------#
# Solaris libc reinitializes mutex udp->ld_lock in the child's post-fork
# handler.
{
   Solaris:postfork_child_mutex_reinit
   drd:MutexErr
   fun:mutex_init
   fun:postfork1_child
   fun:forkx
}

#----------------------------------------------------------------------------#
# Solaris libc implements pthread barrier with a mutex and a condition
# variable. In pthread_barrier_wait(), the last thread returning with
# SERIAL_THREAD first unlocks the mutex and then broadcasts the condition
# variable. This is ok here because that mutex does not have any priorities
# associated, therefore no unpredicatble scheduling behaviour can occurr.
{
   Solaris:pthread_barrier_wait
   Helgrind:Misc
   fun:pthread_cond_broadcast_WRK
   fun:cond_broadcast
   fun:pthread_barrier_wait
}

