;; is only used in case constructs, to indicate the end of an alternative. (It’s present where you have break in C.)
case $answer in
yes) echo 'yay!';;
no) echo 'boo!';;
esac
Syntactically, ; and & both mark the end of a command. A newline is equivalent to ;, in a first approximation. The difference between them is that ; or newline indicates that the command must be executed in the foreground, whereas & indicates that the command must be executed in the background.
So here you need & wait. & ; is a syntax error (you can’t have an empty command). & ;; is also a syntax error; ash lets it go (as if you’d written just &), but bash complains. Evidently your sh is some ash variant (such as dash, which is /bin/sh on many Debian derivatives).