ret = widget_instance_destroy( mInstanceId.c_str() );
if( ret < 0 )
{
- DALI_LOG_ERROR("widget_instance_destroy() is failed.");
- return false;
+ DALI_LOG_ERROR("widget_instance_destroy() is failed. ret:%d, id:%s \n",ret, mInstanceId.c_str());
}
Dali::WidgetView::WidgetView handle( GetOwner() );
mInstanceId.clear();
CloseRemoteSurface();
+ SetPermanentDelete(true);
mCreated = false;
mResizeRequired = false;
mPausedManually = false;
- return true;
+ return ( (ret < 0)? false : true );
}
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::TerminateWidget: Widget is terminated/destroyed and deleted signal is emitted.\n" );
void WidgetView::UpdateBuffer( struct tizen_remote_surface *surface, struct wl_buffer *buffer, int32_t fd)
{
+ // Sometimes, UpdateBuffer is called even if widgetview is destroyed.
+ // This behavior can cause a crash, so it does not render.
+ if( IsPermanentDelete() )
+ {
+ DALI_LOG_ERROR("This widgetView is deleted already. so don't try update bufffer.");
+ return;
+ }
+
if( !IsWidgetRenderer() )
{
tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);