Just a minor bug in the documentation - http://www.postgresql.org/docs/9.3/static/bgworker.html says that bgw_main takes an argument of void*, but when declared as such gcc -Wall gives a warning of:
init.c:59:19: warning: assignment from incompatible pointer type [enabled by default]
worker.bgw_main = listener;
the bgw_main should be declared as taking an argument of Datum.
James