Thanks for this analysis. Reading code of viking and gpsd, I think the deepest matter is around the call to gps_open. I think we have to replace it by a call to gps_open_r.
I will test this idea tonigh.
A fix is planned. See previous discussion: http://sourceforge.net/mailarchive/forum.php?thread_name=8b65902a0912280105t11da34v9c8abde231b0ca6f@mail.gmail.com&forum_name=viking-devel.
I fear it will not be really easy as viking uses Gtk+2 and zyGrid uses Qt.
Perhaps can you take a look at Marble, which is something like viking, but with Qt.