Hello community, here is the log from the commit of package DirectFB for openSUSE:Factory checked in at 2014-11-18 22:55:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/DirectFB (Old) and /work/SRC/openSUSE:Factory/.DirectFB.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "DirectFB" Changes: -------- --- /work/SRC/openSUSE:Factory/DirectFB/DirectFB.changes 2014-08-20 17:51:38.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.DirectFB.new/DirectFB.changes 2014-11-18 22:55:57.000000000 +0100 @@ -1,0 +2,53 @@ +Fri Nov 14 18:47:04 UTC 2014 - [email protected] + +- Update to version 1.7.6 + + StateClient: Fix double-free memory corruption. + StateClient object instances are stored in thread local storage. Each + thread can only have one instance of this object. There is however one + shared list inside of TLSOjbect2 that holds references to all + StateClient objects created in a given process. The instances of + StateClient can be destroyed in two ways. + 1. Something calls dfb_gfx_cleanup(). + 2. Thread terminates. + In the first case the function is called once when the process using + directfb shuts down. This happens ony once during application life. + The function iterates over all StateClient objects present in the + TLSObject2::list and removes each one. + The second case libc will call the callback function passed to + direct_tls_register() when the thread which registered the tls object + terminates. + The problem is that while dfb_gfx_cleanup() does remove the deleted objects + from the TLSObject2::list, the default callback function passed to + direct_tls_register (TLSObject2::destructor) does not. As a result the + following situation will lead to a double-free memory corruption. + 1. The application starts and initializes directfb. + 2. At least one extra thread is started, this thread uses some dfb APIs + which internally create new StateClient object. + 3. The extra thread terminates thus invokes TLSObject2::destructor. + 4. The application exits, dfb_gfx_cleanup() is called, StateClient for the + extra thread is deleted for the second time. + The problem is nicely illustrated by valgrind. In this case dfbterm is + used as the application triggering the problem. + ==336== Invalid read of size 4 + ==336== at 0x4EA4120: CoreGraphicsStateClient_Deinit + (CoreGraphicsStateClient.cpp:387) + ==336== by 0x4F7165F: StateClient::~StateClient() (util.cpp:78) + ==336== by 0x4F71A07: Direct::TLSObject2<StateClient, StateClient, + StateClient>::DeleteAll() (TLSObject.h:175) + ==336== by 0x4EE3130: dfb_core_shutdown (core.c:1734) + ==336== by 0x4EE36F3: dfb_core_arena_shutdown (core.c:2020) + ==336== by 0x4EE418C: dfb_core_destroy (core.c:472) + ==336== by 0x4E969A2: IDirectFB_Destruct (idirectfb.c:307) + ==336== by 0x402813: main (term.c:523) + ==336== Address 0x8b37730 is 1,072 bytes inside a block of size 1,136 free'd + ==336== at 0x4C28D2C: operator delete(void*) (vg_replace_malloc.c:482) + ==337== by 0x5233F81: __nptl_deallocate_tsd (pthread_create.c:158) + ==337== by 0x52341E3: start_thread (pthread_create.c:325) + ==336== by 0x5B7A0DC: clone (clone.S:111) + This bug also triggers the following assertion: + Assertion [(client)->magic == D_MAGIC("CoreGraphicsStateClient")] failed + *** [CoreGraphicsStateClient.cpp:387 in + CoreGraphicsStateClient_Deinit()] + + Screen: Add missing code for DSECONF_ASPECT_RATIO to PatchEncoderConfig + +------------------------------------------------------------------- Old: ---- DirectFB-1.7.5.tar.gz New: ---- DirectFB-1.7.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ DirectFB.spec ++++++ --- /var/tmp/diff_new_pack.uBs8Sg/_old 2014-11-18 22:55:58.000000000 +0100 +++ /var/tmp/diff_new_pack.uBs8Sg/_new 2014-11-18 22:55:58.000000000 +0100 @@ -16,12 +16,12 @@ # -%global directfbdir %{_libdir}/directfb-1.7-5 -%global libdirectfb libdirectfb-1_7-5 -%global libdfb lib++dfb-1_7-5 +%global directfbdir %{_libdir}/directfb-1.7-6 +%global libdirectfb libdirectfb-1_7-6 +%global libdfb lib++dfb-1_7-6 Name: DirectFB -Version: 1.7.5 +Version: 1.7.6 Release: 0 Summary: Graphics Library for Framebuffer Devices License: LGPL-2.1+ ++++++ DirectFB-1.7.5.tar.gz -> DirectFB-1.7.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/ChangeLog new/DirectFB-1.7.6/ChangeLog --- old/DirectFB-1.7.5/ChangeLog 2014-07-28 12:02:26.000000000 +0200 +++ new/DirectFB-1.7.6/ChangeLog 2014-08-14 09:17:47.000000000 +0200 @@ -1,3 +1,85 @@ +commit 4b4ca723b8dc7d83b8cd8c709f4b0d5e7a96e06b +Author: Denis Oliver Kropp <[email protected]> +Date: Thu Aug 14 09:17:21 2014 +0200 + + core: add missing ret variable + +commit b5d96d22f4dc2b5b0b340224dbd047bc1ef99918 +Author: Denis Oliver Kropp <[email protected]> +Date: Thu Aug 14 09:14:41 2014 +0200 + + Revert "Core: Add Shutdown method to run in dispatch thread, solving (potential) shutdown issues caused by race conditions with dispatch thread" + + This reverts commit d1267d05fb964f882b90599b8259e41a9a4e811b. + +commit 3332d3e908946ad21def7820f9e17015693ea258 +Author: Denis Oliver Kropp <[email protected]> +Date: Tue Aug 5 18:11:07 2014 +0200 + + [directfb-dev] [PATCH] StateClient: Fix double-free memory corruption. + + StateClient object instances are stored in thread local storage. Each + thread can only have one instance of this object. There is however one + shared list inside of TLSOjbect2 that holds references to all + StateClient objects created in a given process. The instances of + + StateClient can be destroyed in two ways. + 1. Something calls dfb_gfx_cleanup(). + 2. Thread terminates. + + In the first case the function is called once when the process using + directfb shuts down. This happens ony once during application life. + The function iterates over all StateClient objects present in the + TLSObject2::list and removes each one. + + The second case libc will call the callback function passed to + direct_tls_register() when the thread which registered the tls object + terminates. + + The problem is that while dfb_gfx_cleanup() does remove the deleted objects + from the TLSObject2::list, the default callback function passed to + direct_tls_register (TLSObject2::destructor) does not. As a result the + following situation will lead to a double-free memory corruption. + 1. The application starts and initializes directfb. + 2. At least one extra thread is started, this thread uses some dfb APIs + which internally create new StateClient object. + 3. The extra thread terminates thus invokes TLSObject2::destructor. + 4. The application exits, dfb_gfx_cleanup() is called, StateClient for the + extra thread is deleted for the second time. + + The problem is nicely illustrated by valgrind. In this case dfbterm is + used as the application triggering the problem. + + ==336== Invalid read of size 4 + ==336== at 0x4EA4120: CoreGraphicsStateClient_Deinit + (CoreGraphicsStateClient.cpp:387) + ==336== by 0x4F7165F: StateClient::~StateClient() (util.cpp:78) + ==336== by 0x4F71A07: Direct::TLSObject2<StateClient, StateClient, + StateClient>::DeleteAll() (TLSObject.h:175) + ==336== by 0x4EE3130: dfb_core_shutdown (core.c:1734) + ==336== by 0x4EE36F3: dfb_core_arena_shutdown (core.c:2020) + ==336== by 0x4EE418C: dfb_core_destroy (core.c:472) + ==336== by 0x4E969A2: IDirectFB_Destruct (idirectfb.c:307) + ==336== by 0x402813: main (term.c:523) + ==336== Address 0x8b37730 is 1,072 bytes inside a block of size 1,136 free'd + ==336== at 0x4C28D2C: operator delete(void*) (vg_replace_malloc.c:482) + ==337== by 0x5233F81: __nptl_deallocate_tsd (pthread_create.c:158) + ==337== by 0x52341E3: start_thread (pthread_create.c:325) + ==336== by 0x5B7A0DC: clone (clone.S:111) + + This bug also triggers the following assertion: + Assertion [(client)->magic == D_MAGIC("CoreGraphicsStateClient")] failed + *** [CoreGraphicsStateClient.cpp:387 in + CoreGraphicsStateClient_Deinit()] + + This patch is also applicable for directfb-1.7 branch. + +commit 650773f3b0a08be053687d9bffac6746fe9fe287 +Author: Denis Oliver Kropp <[email protected]> +Date: Mon Jul 28 12:02:50 2014 +0200 + + update changelog + commit a1a930c40f3ecdde7e1fa327a023a1eacff66a6c Author: Denis Oliver Kropp <[email protected]> Date: Thu Jul 24 13:08:45 2014 +0200 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/configure new/DirectFB-1.7.6/configure --- old/DirectFB-1.7.5/configure 2014-07-24 11:21:03.000000000 +0200 +++ new/DirectFB-1.7.6/configure 2014-08-14 09:22:05.000000000 +0200 @@ -3272,7 +3272,7 @@ # DIRECTFB_MAJOR_VERSION=1 DIRECTFB_MINOR_VERSION=7 -DIRECTFB_MICRO_VERSION=5 +DIRECTFB_MICRO_VERSION=6 DIRECTFB_INTERFACE_AGE=0 DIRECTFB_BINARY_AGE=0 DIRECTFB_VERSION=$DIRECTFB_MAJOR_VERSION.$DIRECTFB_MINOR_VERSION.$DIRECTFB_MICRO_VERSION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/configure.in new/DirectFB-1.7.6/configure.in --- old/DirectFB-1.7.5/configure.in 2014-07-24 11:20:24.000000000 +0200 +++ new/DirectFB-1.7.6/configure.in 2014-08-14 09:19:24.000000000 +0200 @@ -16,7 +16,7 @@ # DIRECTFB_MAJOR_VERSION=1 DIRECTFB_MINOR_VERSION=7 -DIRECTFB_MICRO_VERSION=5 +DIRECTFB_MICRO_VERSION=6 DIRECTFB_INTERFACE_AGE=0 DIRECTFB_BINARY_AGE=0 DIRECTFB_VERSION=$DIRECTFB_MAJOR_VERSION.$DIRECTFB_MINOR_VERSION.$DIRECTFB_MICRO_VERSION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/directfb.spec new/DirectFB-1.7.6/directfb.spec --- old/DirectFB-1.7.5/directfb.spec 2014-07-24 11:22:33.000000000 +0200 +++ new/DirectFB-1.7.6/directfb.spec 2014-08-14 09:22:23.000000000 +0200 @@ -1,5 +1,5 @@ %define name directfb -%define version 1.7.5 +%define version 1.7.6 %define oname DirectFB %define libname lib%name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/include/directfb_version.h new/DirectFB-1.7.6/include/directfb_version.h --- old/DirectFB-1.7.5/include/directfb_version.h 2014-07-24 11:22:34.000000000 +0200 +++ new/DirectFB-1.7.6/include/directfb_version.h 2014-08-14 09:22:23.000000000 +0200 @@ -31,7 +31,7 @@ #define DIRECTFB_MAJOR_VERSION (1) #define DIRECTFB_MINOR_VERSION (7) -#define DIRECTFB_MICRO_VERSION (5) +#define DIRECTFB_MICRO_VERSION (6) #define DIRECTFB_BINARY_AGE (0) #define DIRECTFB_INTERFACE_AGE (0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/lib/fusiondale/fusiondale_version.h new/DirectFB-1.7.6/lib/fusiondale/fusiondale_version.h --- old/DirectFB-1.7.5/lib/fusiondale/fusiondale_version.h 2014-07-24 11:22:41.000000000 +0200 +++ new/DirectFB-1.7.6/lib/fusiondale/fusiondale_version.h 2014-08-14 09:22:23.000000000 +0200 @@ -26,7 +26,7 @@ #define FUSIONDALE_MAJOR_VERSION (1) #define FUSIONDALE_MINOR_VERSION (7) -#define FUSIONDALE_MICRO_VERSION (5) +#define FUSIONDALE_MICRO_VERSION (6) #define FUSIONDALE_BINARY_AGE (0) #define FUSIONDALE_INTERFACE_AGE (0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/lib/fusionsound/fusionsound_version.h new/DirectFB-1.7.6/lib/fusionsound/fusionsound_version.h --- old/DirectFB-1.7.5/lib/fusionsound/fusionsound_version.h 2014-07-24 11:22:43.000000000 +0200 +++ new/DirectFB-1.7.6/lib/fusionsound/fusionsound_version.h 2014-08-14 09:22:24.000000000 +0200 @@ -30,7 +30,7 @@ #define FUSIONSOUND_MAJOR_VERSION (1) #define FUSIONSOUND_MINOR_VERSION (7) -#define FUSIONSOUND_MICRO_VERSION (5) +#define FUSIONSOUND_MICRO_VERSION (6) #define FUSIONSOUND_BINARY_AGE (0) #define FUSIONSOUND_INTERFACE_AGE (0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/src/core/CoreDFB.cpp new/DirectFB-1.7.6/src/core/CoreDFB.cpp --- old/DirectFB-1.7.5/src/core/CoreDFB.cpp 2014-07-24 11:24:20.000000000 +0200 +++ new/DirectFB-1.7.6/src/core/CoreDFB.cpp 2014-08-14 09:15:36.000000000 +0200 @@ -478,40 +478,6 @@ return DFB_UNIMPLEMENTED; } -DFBResult -CoreDFB_Shutdown( - CoreDFB *obj - -) -{ - DFBResult ret; - - switch (CoreDFB_CallMode( core_dfb )) { - case COREDFB_CALL_DIRECT:{ - DirectFB::ICore_Real real( core_dfb, obj ); - - Core_PushCalling(); - ret = real.Shutdown( ); - Core_PopCalling(); - - return ret; - } - case COREDFB_CALL_INDIRECT: { - DirectFB::ICore_Requestor requestor( core_dfb, obj ); - - Core_PushCalling(); - ret = requestor.Shutdown( ); - Core_PopCalling(); - - return ret; - } - case COREDFB_CALL_DENY: - return DFB_DEAD; - } - - return DFB_UNIMPLEMENTED; -} - /*********************************************************************************************************************/ static FusionCallHandlerResult @@ -1208,52 +1174,6 @@ return ret; } - -DFBResult -ICore_Requestor::Shutdown( - -) -{ - DFBResult ret = DFB_OK; - char args_static[FLUXED_ARGS_BYTES]; - char return_args_static[FLUXED_ARGS_BYTES]; - CoreDFBShutdown *args = (CoreDFBShutdown*) args_alloc( args_static, sizeof(CoreDFBShutdown) ); - CoreDFBShutdownReturn *return_args; - - if (!args) - return (DFBResult) D_OOM(); - - return_args = (CoreDFBShutdownReturn*) args_alloc( return_args_static, sizeof(CoreDFBShutdownReturn) ); - - if (!return_args) { - args_free( args_static, args ); - return (DFBResult) D_OOM(); - } - - D_DEBUG_AT( DirectFB_CoreDFB, "ICore_Requestor::%s()\n", __FUNCTION__ ); - - - - ret = (DFBResult) CoreDFB_Call( obj, FCEF_NONE, CoreDFB_Shutdown, args, sizeof(CoreDFBShutdown), return_args, sizeof(CoreDFBShutdownReturn), NULL ); - if (ret) { - D_DERROR( ret, "%s: CoreDFB_Call( CoreDFB_Shutdown ) failed!\n", __FUNCTION__ ); - goto out; - } - - if (return_args->result) { - /*D_DERROR( return_args->result, "%s: CoreDFB_Shutdown failed!\n", __FUNCTION__ );*/ - ret = return_args->result; - goto out; - } - - - -out: - args_free( return_args_static, return_args ); - args_free( args_static, args ); - return ret; -} - /*********************************************************************************************************************/ static DFBResult @@ -1505,22 +1425,6 @@ return DFB_OK; } - - case CoreDFB_Shutdown: { - D_UNUSED - CoreDFBShutdown *args = (CoreDFBShutdown *) ptr; - CoreDFBShutdownReturn *return_args = (CoreDFBShutdownReturn *) ret_ptr; - - D_DEBUG_AT( DirectFB_CoreDFB, "=-> CoreDFB_Shutdown\n" ); - - return_args->result = real.Shutdown( ); - if (return_args->result == DFB_OK) { - } - - *ret_length = sizeof(CoreDFBShutdownReturn); - - return DFB_OK; - } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/src/core/CoreDFB.h new/DirectFB-1.7.6/src/core/CoreDFB.h --- old/DirectFB-1.7.5/src/core/CoreDFB.h 2014-07-24 11:24:20.000000000 +0200 +++ new/DirectFB-1.7.6/src/core/CoreDFB.h 2014-08-14 09:15:36.000000000 +0200 @@ -111,10 +111,6 @@ CoreDFB *obj ); -DFBResult CoreDFB_Shutdown( - CoreDFB *obj -); - void CoreDFB_Init_Dispatch( CoreDFB *core, @@ -150,7 +146,6 @@ CoreDFB_ClipboardGet = 10, CoreDFB_ClipboardGetTimestamp = 11, CoreDFB_Roundtrip = 12, - CoreDFB_Shutdown = 13, } CoreDFBCall; /* @@ -316,17 +311,6 @@ } CoreDFBRoundtripReturn; -/* - * CoreDFB_Shutdown - */ -typedef struct { -} CoreDFBShutdown; - -typedef struct { - DFBResult result; -} CoreDFBShutdownReturn; - - @@ -404,10 +388,6 @@ ) = 0; - virtual DFBResult Shutdown( - - ) = 0; - }; @@ -489,10 +469,6 @@ ); - virtual DFBResult Shutdown( - - ); - }; @@ -575,10 +551,6 @@ ); - virtual DFBResult Shutdown( - - ); - }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/src/core/CoreDFB_real.cpp new/DirectFB-1.7.6/src/core/CoreDFB_real.cpp --- old/DirectFB-1.7.5/src/core/CoreDFB_real.cpp 2014-07-24 11:20:24.000000000 +0200 +++ new/DirectFB-1.7.6/src/core/CoreDFB_real.cpp 2014-08-14 09:14:41.000000000 +0200 @@ -81,20 +81,6 @@ } DFBResult -ICore_Real::Shutdown( -) -{ - D_DEBUG_AT( DirectFB_CoreDFB, "ICore_Real::%s()\n", __FUNCTION__ ); - - D_MAGIC_ASSERT( obj, CoreDFB ); - - if (Core_GetIdentity() != FUSION_ID_MASTER) - return DFB_ACCESSDENIED; - - return (DFBResult) dfb_core_shutdown( core, false ); -} - -DFBResult ICore_Real::Register( u32 slave_call ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/src/core/core.c new/DirectFB-1.7.6/src/core/core.c --- old/DirectFB-1.7.5/src/core/core.c 2014-07-24 11:20:24.000000000 +0200 +++ new/DirectFB-1.7.6/src/core/core.c 2014-08-14 09:16:14.000000000 +0200 @@ -1702,10 +1702,12 @@ return true; } -int +static int dfb_core_shutdown( CoreDFB *core, bool emergency ) { + DFBResult ret; CoreDFBShared *shared; + int loops = 10; D_MAGIC_ASSERT( core, CoreDFB ); @@ -1729,18 +1731,30 @@ dfb_core_enum_layer_regions( core, region_callback, core ); - dfb_core_part_shutdown( core, &dfb_screen_core, emergency ); + + fusion_stop_dispatcher( core->world, false ); dfb_gfx_cleanup(); - if (direct_config_get_int_value( "shutdown-info" )) { - D_ERROR( "DirectFB/Core: Some objects remain alive, application or internal ref counting issue!\n" ); + while (loops--) { + fusion_dispatch( core->world, 16384 ); - dfb_core_dump_all( core, &DirectFB_Core, DIRECT_LOG_VERBOSE ); + ret = dfb_core_wait_all( core, 10000 ); + if (ret == DFB_OK) + break; - direct_print_interface_leaks(); + dfb_gfx_cleanup(); } + if (ret == DFB_TIMEOUT) { + if (direct_config_get_int_value( "shutdown-info" )) { + D_ERROR( "DirectFB/Core: Some objects remain alive, application or internal ref counting issue!\n" ); + + dfb_core_dump_all( core, &DirectFB_Core, DIRECT_LOG_VERBOSE ); + + direct_print_interface_leaks(); + } + } /* Destroy window objects. */ fusion_object_pool_destroy( shared->window_pool, core->world ); @@ -1750,6 +1764,8 @@ if (dfb_wm_core.initialized) dfb_wm_close_all_stacks( dfb_wm_core.data_local ); + CoreDFB_Deinit_Dispatch( &shared->call ); + /* Destroy layer context and region objects. */ fusion_object_pool_destroy( shared->layer_region_pool, core->world ); fusion_object_pool_destroy( shared->layer_context_pool, core->world ); @@ -1759,6 +1775,7 @@ /* Shutdown layer core. */ dfb_core_part_shutdown( core, &dfb_layer_core, emergency ); + dfb_core_part_shutdown( core, &dfb_screen_core, emergency ); TaskManager_SyncAll(); @@ -2009,9 +2026,7 @@ } /* Shutdown. */ - ret = CoreDFB_Shutdown( core ); - - CoreDFB_Deinit_Dispatch( &shared->call ); + ret = dfb_core_shutdown( core, emergency ); fusion_hash_destroy( shared->field_hash ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/src/core/core.h new/DirectFB-1.7.6/src/core/core.h --- old/DirectFB-1.7.5/src/core/core.h 2014-07-24 11:20:24.000000000 +0200 +++ new/DirectFB-1.7.6/src/core/core.h 2014-08-14 09:14:41.000000000 +0200 @@ -88,9 +88,6 @@ DFBResult dfb_core_initialize( CoreDFB *core ); -int dfb_core_shutdown ( CoreDFB *core, - bool emergency ); - /* * Object creation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/src/gfx/util.cpp new/DirectFB-1.7.6/src/gfx/util.cpp --- old/DirectFB-1.7.5/src/gfx/util.cpp 2014-07-24 11:20:24.000000000 +0200 +++ new/DirectFB-1.7.6/src/gfx/util.cpp 2014-08-14 09:05:29.000000000 +0200 @@ -87,13 +87,24 @@ static void destroy( void *ctx, StateClient *client ) { - delete client; + _tls.Delete(); } -}; + static StateClient* Get() + { + return _tls.Get(); + } -static Direct::TLSObject2<StateClient> state_client_tls; + static void DeleteAll() + { + _tls.DeleteAll(); + } + +private: + static Direct::TLSObject2<StateClient> _tls; +}; +Direct::TLSObject2<StateClient> StateClient::_tls; extern "C" { @@ -101,13 +112,13 @@ void dfb_gfx_init_tls() { - state_client_tls.Get(); + StateClient::Get(); } void dfb_gfx_cleanup() { - state_client_tls.DeleteAll(); + StateClient::DeleteAll(); } void @@ -139,7 +150,7 @@ { DFBRectangle sourcerect = { 0, 0, source->config.size.w, source->config.size.h }; - StateClient *client = state_client_tls.Get(); + StateClient *client = StateClient::Get(); D_FLAGS_SET( client->state.modified, SMF_CLIP | SMF_SOURCE | SMF_DESTINATION | SMF_FROM | SMF_TO ); @@ -179,7 +190,7 @@ { DFBRectangle rect = { 0, 0, surface->config.size.w, surface->config.size.h }; - StateClient *client = state_client_tls.Get(); + StateClient *client = StateClient::Get(); D_FLAGS_SET( client->state.modified, SMF_CLIP | SMF_COLOR | SMF_DESTINATION | SMF_TO ); @@ -232,7 +243,7 @@ return; } - StateClient *client = state_client_tls.Get(); + StateClient *client = StateClient::Get(); D_FLAGS_SET( client->state.modified, SMF_CLIP | SMF_SOURCE | SMF_DESTINATION | SMF_FROM | SMF_TO ); @@ -300,7 +311,7 @@ } if (n > 0) { - StateClient *client = state_client_tls.Get(); + StateClient *client = StateClient::Get(); D_FLAGS_SET( client->state.modified, SMF_CLIP | SMF_SOURCE | SMF_DESTINATION | SMF_FROM | SMF_TO ); @@ -342,7 +353,7 @@ DFBRectangle rect = { 0, 0, source->config.size.w, source->config.size.h }; DFBRectangle rects[num]; DFBPoint points[num]; - CoreGraphicsStateClient *client = _client ? _client : &state_client_tls.Get()->client; + CoreGraphicsStateClient *client = _client ? _client : &StateClient::Get()->client; CardState *state = client->state; CardState backup; @@ -413,7 +424,7 @@ { DFBRectangle rect; DFBPoint point; - StateClient *client = state_client_tls.Get(); + StateClient *client = StateClient::Get(); if (region) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DirectFB-1.7.5/src/media/DataBuffer.cpp new/DirectFB-1.7.6/src/media/DataBuffer.cpp --- old/DirectFB-1.7.5/src/media/DataBuffer.cpp 2014-07-11 23:05:01.000000000 +0200 +++ new/DirectFB-1.7.6/src/media/DataBuffer.cpp 2014-01-22 17:08:31.000000000 +0100 @@ -33,8 +33,6 @@ #include <config.h> -#include <direct/Types++.h> - #include "DataBuffer.h" extern "C" { -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
