fix core
diff --git a/be/src/cloud/cloud_tablet.cpp b/be/src/cloud/cloud_tablet.cpp
index e515c04..cfb3159 100644
--- a/be/src/cloud/cloud_tablet.cpp
+++ b/be/src/cloud/cloud_tablet.cpp
@@ -349,6 +349,8 @@
             g_file_cache_cloud_tablet_submitted_segment_size
                     << rowset->rowset_meta()->segment_file_size(seg_id);
         }
+        auto self = std::dynamic_pointer_cast<CloudTablet>(shared_from_this());
+        // clang-format off
         _engine.file_cache_block_downloader().submit_download_task(io::DownloadFileMeta {
                 .path = storage_resource.value()->remote_segment_path(*rowset_meta, seg_id),
                 .file_size = rowset->rowset_meta()->segment_file_size(seg_id),
@@ -358,8 +360,8 @@
                                 .expiration_time = expiration_time,
                                 .is_dryrun = config::enable_reader_dryrun_when_download_file_cache,
                         },
-                .download_done {[this, rowset, delay_add_rowset](Status st) {
-                    warm_up_done_cb(rowset, st, delay_add_rowset);
+                .download_done {[self, rowset, delay_add_rowset](Status st) {
+                    self->warm_up_done_cb(rowset, st, delay_add_rowset);
                     if (!st) {
                         LOG_WARNING("add rowset warm up error ").error(st);
                     }
diff --git a/be/src/olap/base_tablet.h b/be/src/olap/base_tablet.h
index a46b195..0cc0fa1 100644
--- a/be/src/olap/base_tablet.h
+++ b/be/src/olap/base_tablet.h
@@ -56,7 +56,7 @@
 enum class CompactionStage { NOT_SCHEDULED, PENDING, EXECUTING };
 
 // Base class for all tablet classes
-class BaseTablet {
+class BaseTablet : public std::enable_shared_from_this<BaseTablet> {
 public:
     explicit BaseTablet(TabletMetaSharedPtr tablet_meta);
     virtual ~BaseTablet();