sunhelly commented on a change in pull request #3553:
URL: https://github.com/apache/hbase/pull/3553#discussion_r684342153



##########
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScannerImpl.java
##########
@@ -768,7 +768,7 @@ public synchronized boolean reseek(byte[] row) throws 
IOException {
   }
 
   @Override
-  public void shipped() throws IOException {
+  public synchronized void shipped() throws IOException {

Review comment:
       Because in the StoreScanner, the` prevCell` will be copied to heap 
before ship(), but it may not be null after initialized even after the close() 
of the store scanner. As a result, when there are concurrent close() and ship() 
of a scanner, and heap cleared before ship, the `prevCell` block will be 
released before copy the cell.
   In RPC handlers, suppose a situation, two scan() RPCs use the same scanner, 
and one got partial results, one found that no more results, then in the RPC 
callback, there is no guarantee for the close callback happens before the ship 
callback, then when ship() copy `prevCell`, the close may have already released 
previous blocks...
   
   




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to