You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@kudu.apache.org by "Alexey Serbin (Code Review)" <ge...@cloudera.org> on 2018/02/16 06:32:33 UTC

[kudu-CR] KUDU-2295 fix nullptr dereference in Tablet

Alexey Serbin has uploaded this change for review. ( http://gerrit.cloudera.org:8080/9350


Change subject: KUDU-2295 fix nullptr dereference in Tablet
......................................................................

KUDU-2295 fix nullptr dereference in Tablet

Prior to this patch, in the case of concurrent events of shutting
down a tablet and running a scan on it, sometimes the code in
Tablet::GetTabletAncientHistoryMark() ended up trying to
dereference invalid (i.e. already deleted) pointer to a Clock object.

That was because of the incorrect way of passing around a pointer
originally wrapped into scoped_refptr.  In essence, the construct
below is a no-no since it creates two independent ref-counted objects
for the same pointer:

  scoped_refptr<X> a(new X);
  scoped_refptr<X> b(a.get());

In this particular case, it might happen that after removing the last
reference to Clock object originated in TSTabletManager::OpenTablet(),
the delete is called for the Clock object, invalidating the clock_
member in TabletReplica, Tablet, and ServerBase objects.

Change-Id: Id133f33e45e5281200fc941faa72480caf34de78
---
M src/kudu/master/sys_catalog.cc
M src/kudu/server/server_base.h
M src/kudu/tablet/tablet-harness.h
M src/kudu/tablet/tablet-test-util.h
M src/kudu/tablet/tablet_bootstrap.cc
M src/kudu/tablet/tablet_bootstrap.h
M src/kudu/tablet/tablet_replica-test.cc
M src/kudu/tserver/tablet_copy_source_session-test.cc
M src/kudu/tserver/ts_tablet_manager.cc
9 files changed, 20 insertions(+), 13 deletions(-)



  git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/50/9350/1
-- 
To view, visit http://gerrit.cloudera.org:8080/9350
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id133f33e45e5281200fc941faa72480caf34de78
Gerrit-Change-Number: 9350
Gerrit-PatchSet: 1
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>

[kudu-CR] KUDU-2295 fix nullptr dereference in Tablet

Posted by "Alexey Serbin (Code Review)" <ge...@cloudera.org>.
Alexey Serbin has abandoned this change. ( http://gerrit.cloudera.org:8080/9350 )

Change subject: KUDU-2295 fix nullptr dereference in Tablet
......................................................................


Abandoned

Ah, I take it back -- the scoped_refptr consumes RefCountedThreadSafe, and those ops seems to be safe.  I confused that with shared_ptr.
-- 
To view, visit http://gerrit.cloudera.org:8080/9350
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: abandon
Gerrit-Change-Id: Id133f33e45e5281200fc941faa72480caf34de78
Gerrit-Change-Number: 9350
Gerrit-PatchSet: 1
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Kudu Jenkins
Gerrit-Reviewer: Mike Percy <mp...@apache.org>
Gerrit-Reviewer: Tidy Bot
Gerrit-Reviewer: Todd Lipcon <to...@apache.org>