How does PoW solved in miner.cpp gets transferred to main.cpp in source code? As per my understanding of bitcoin codebase, the following events happen after we solve a proof of work.


In miner.cpp, once the miner thread solves a new Proof-of-work (PoW), ProcessBlockFound basically notifies others via a signal BlockFound.
BlockFound signal calls ResetRequestCount which basically resets the mpRequestCount in wallet.h via the validationInterface.h.
(Missing Logic)  
A new NetMsgType::INV is issued from main.cpp in SendMessages/ProcessMessages to all peers.
These messages are eventually dispatched to all peers via network socket logic net.cpp 


I am missing the main piece of code logic between step2 and step4. Can any expert help me understand what background story is happening after step2?
If you read a few lines after the BlockFound signal, you'll see:

CValidationState state;
if (!ProcessNewBlock(state, chainparams, NULL, pblock, true, NULL))
    return error("BitcoinMiner: ProcessNewBlock, block not accepted");


https://github.com/bitcoin/bitcoin/blob/v0.12.0rc2/src/miner.cpp#L373-L375

This is where the processing actually starts. ProcessNewBlock is defined in main.cpp.