##// END OF EJS Templates
rust-cpython: mark all PyLeaked methods as unsafe...
rust-cpython: mark all PyLeaked methods as unsafe Unfortunately, these methods can be abused to obtain the inner 'static reference. The simplest (pseudo-code) example is: let leaked: PyLeaked<&'static _> = shared.leak_immutable(); let static_ref: &'static _ = &*leaked.try_borrow(py)?; // PyLeakedRef::deref() tries to bound the lifetime to itself, but // the underlying data is a &'static reference, so the returned // reference can be &'static. This problem can be easily fixed by coercing the lifetime, but there are many other ways to achieve that, and there wouldn't be a generic solution: let leaked: PyLeaked<&'static [_]> = shared.leak_immutable(); let leaked_iter: PyLeaked<slice::Iter<'static, _>> = unsafe { leaked.map(|v| v.iter()) }; let static_slice: &'static [_] = leaked_iter.try_borrow(py)?.as_slice(); So basically I failed to design the safe borrowing interface. Maybe we'll instead have to add much more restricted interface on top of the unsafe PyLeaked methods? For instance, Iterator::next() could be implemented if its Item type is not &'a (where 'a may be cheated.) Anyway, this seems not an easy issue, so it's probably better to leave the current interface as unsafe, and get broader comments while upstreaming this feature.
Yuya Nishihara -
r44689:e960c30d default
Show More
Name Size Modified Last Commit Author
/ contrib / chg
Makefile Loading ...
README Loading ...
chg.1 Loading ...
chg.c Loading ...
hgclient.c Loading ...
hgclient.h Loading ...
procutil.c Loading ...
procutil.h Loading ...
util.c Loading ...
util.h Loading ...

cHg
===

A fast client for Mercurial command server running on Unix.

Install:

$ make
$ make install

Usage:

$ chg help # show help of Mercurial
$ alias hg=chg # replace hg command
$ chg --kill-chg-daemon # terminate background server

Environment variables:

Although cHg tries to update environment variables, some of them cannot be
changed after spawning the server. The following variables are specially
handled:

* configuration files are reloaded automatically by default.
* CHGHG or HG specifies the path to the hg executable spawned as the
background command server.

The following variables are available for testing:

* CHGDEBUG enables debug messages.
* CHGSOCKNAME specifies the socket path of the background cmdserver.
* CHGTIMEOUT specifies how many seconds chg will wait before giving up
connecting to a cmdserver. If it is 0, chg will wait forever. Default: 60