It may however, ignore the block that has been sent using processBlock, eventhough it would have been valid.
2. pushBlock creates block and check in validity outside syncronization.
3. Especially dangerous is checks using lastBlock.
4. Than inside syncronization it set processed block as lastBlock, broking what's done in parallel thread.
I think, whole pushBlock() must be sync'ed on blocks.