Hi,
what you are trying to do will not work in GNURadio without heavy modification of the scheduler. The in/out buffers of the blocks are allocated by the scheduler as double-mapped FIFO buffers. Whenever your (general_)work() has produced some samples, it will inform the scheduler about the exact amount of samples, let's say N, via the produced() call. The scheduler will then advance the write pointer for that output buffer by N-(history-1) entries. GNURadios scheduler is essentially a stream based scheduler. While tagged streams provided a good approach to packet based communication schemes, I think even then you could not guaranty that for a packet at address 0 with the length N, the next packet will be placed in the output buffer at address 0+N and so on.
One other way you could archieve your task (if I understood it correctly), to strip away the preamble before the FFT when you detect a packet and then preload the fft->input() with that preamble. Inside the FFT block you would have to detect the beginning of the packet again and then copy that packet to the fft input buffer beginning at fft->input()[length_of_preamble].
All this would require you to write custom blocks and in the end I am not sure if copying the preamble would be really the tightest bottleneck you could find in your flowgraph.