Yes, and you need to make sure that the upload has completed before you reuse the pixel buffer too.
And the synchronization API isn't very awesome, it can only wait for all operations until a certain point have been completed. You can't easily track individual transfers.
You either need to use OpenGL sync objects very carefully or accept the risk of unintended GPU stalls.