notifies (PGconn)

    /*
     * call-seq:
     *    conn.notifies()
     *
     * Returns an array of the unprocessed notifiers.
     * If there is no unprocessed notifier, it returns +nil+.
     */
    static VALUE
    pgconn_notifies(VALUE self)
    {
            PGconn* conn = get_pgconn(self);
            PGnotify *notify;
            VALUE hash;
            VALUE sym_relname, sym_be_pid, sym_extra;
            VALUE relname, be_pid, extra;

            sym_relname = ID2SYM(rb_intern("relname"));
            sym_be_pid = ID2SYM(rb_intern("be_pid"));
            sym_extra = ID2SYM(rb_intern("extra"));

            notify = PQnotifies(conn);
            if (notify == NULL) {
                    return Qnil;
            }

            hash = rb_hash_new();
            relname = rb_tainted_str_new2(notify->relname);
            be_pid = INT2NUM(notify->be_pid);
            extra = rb_tainted_str_new2(PGNOTIFY_EXTRA(notify));

            rb_hash_aset(hash, sym_relname, relname);
            rb_hash_aset(hash, sym_be_pid, be_pid);
            rb_hash_aset(hash, sym_extra, extra);

            PQfreemem(notify);
            return hash;
    }