cancel (PGconn)

    /*
     * call-seq:
     *    conn.cancel() -> String
     *
     * Requests cancellation of the command currently being
     * processed.
     *
     * Returns +nil+ on success, or a string containing the
     * error message if a failure occurs.
     */
    static VALUE
    pgconn_cancel(VALUE self)
    {
            char errbuf[256];
            PGcancel *cancel;
            VALUE retval;
            int ret;

            cancel = PQgetCancel(get_pgconn(self));
            if(cancel == NULL)
                    rb_raise(rb_ePGError,"Invalid connection!");

            ret = PQcancel(cancel, errbuf, 256);
            if(ret == 1)
                    retval = Qnil;
            else
                    retval = rb_str_new2(errbuf);

            PQfreeCancel(cancel);
            return retval;
    }