diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index d797c8a0b73108f7d0f9590a2fb7b026bf5d36b7..a91eab1ac11f5858c80dbec0575686bc5b52f1e2 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -838,14 +838,13 @@ int ff_alloc_packet(AVPacket *avpkt, int size)
         return AVERROR(EINVAL);
 
     if (avpkt->data) {
-        uint8_t *pkt_data;
+        void *destruct = avpkt->destruct;
 
         if (avpkt->size < size)
             return AVERROR(EINVAL);
 
-        pkt_data = avpkt->data;
         av_init_packet(avpkt);
-        avpkt->data = pkt_data;
+        avpkt->destruct = destruct;
         avpkt->size = size;
         return 0;
     } else {