Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/19222#discussion_r175604820
  
    --- Diff: 
common/unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java
 ---
    @@ -36,22 +42,34 @@ public MemoryBlock allocate(long size) throws 
OutOfMemoryError {
     
       @Override
       public void free(MemoryBlock memory) {
    -    assert (memory.obj == null) :
    -      "baseObject not null; are you trying to use the off-heap allocator 
to free on-heap memory?";
    -    assert (memory.pageNumber != 
MemoryBlock.FREED_IN_ALLOCATOR_PAGE_NUMBER) :
    +    assert(memory instanceof OffHeapMemoryBlock) :
    +      "UnsafeMemoryAllocator can only free OffHeapMemoryBlock.";
    +    if (memory == OffHeapMemoryBlock.NULL) return;
    +    assert (memory.getPageNumber() != 
MemoryBlock.FREED_IN_ALLOCATOR_PAGE_NUMBER) :
           "page has already been freed";
    -    assert ((memory.pageNumber == MemoryBlock.NO_PAGE_NUMBER)
    -            || (memory.pageNumber == 
MemoryBlock.FREED_IN_TMM_PAGE_NUMBER)) :
    +    assert ((memory.getPageNumber() == MemoryBlock.NO_PAGE_NUMBER)
    +            || (memory.getPageNumber() == 
MemoryBlock.FREED_IN_TMM_PAGE_NUMBER)) :
           "TMM-allocated pages must be freed via TMM.freePage(), not directly 
in allocator free()";
     
         if (MemoryAllocator.MEMORY_DEBUG_FILL_ENABLED) {
           memory.fill(MemoryAllocator.MEMORY_DEBUG_FILL_FREED_VALUE);
         }
    +
         Platform.freeMemory(memory.offset);
    +
         // As an additional layer of defense against use-after-free bugs, we 
mutate the
         // MemoryBlock to reset its pointer.
    -    memory.offset = 0;
    +    memory.resetObjAndOffset();
         // Mark the page as freed (so we can detect double-frees).
    -    memory.pageNumber = MemoryBlock.FREED_IN_ALLOCATOR_PAGE_NUMBER;
    +    memory.setPageNumber(MemoryBlock.FREED_IN_ALLOCATOR_PAGE_NUMBER);
    +  }
    +
    +  public OffHeapMemoryBlock reallocate(OffHeapMemoryBlock block, long 
oldSize, long newSize) {
    --- End diff --
    
    no one is calling it.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to