-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Concurrent usage of cargo will generally result in badness #354
Comments
Rust, Y U NO |
Using cargo concurrently on the same system often results in badness such as corruption of the global git database, corruption of the local target directory, corruption of output artifacts, etc. This is a pretty rare situation, but is quite troubling to track down when it occurs. To prevent this badness, cargo needs some method of synchronizing with other cargo processes. This is often done with a file lock, but sadly file locks are difficult to use correctly on linux and other flavors of unix [1]. Instead, another mechanism, an OS semaphore, is used. Semaphores provide the exact functionality that is required here as there's no real need to lock a file but rather just synchronize with another process. I wrote external bindings for these semaphores [2] instead of bundling it directly in cargo itself. Currently only windows, linux, and OSX are supported in ipc-rs, but adding new platforms with System V compatibility is just a matter of looking up some constants (nothing too too hard). [1]: http://0pointer.de/blog/projects/locking.html [2]: https://github.com/alexcrichton/ipc-rs Closes rust-lang#354
Note that rustpkg had the same problem and so does pretty much every other build tool I've tested that keeps state around. Most people just punt on this it seems. This really only causes problems when you are trying to usecargo inside of another build system which parallelizes things (like make -j). |
Hm yes, after looking into semaphores and file locks, I'm tempted to punt on this for now until (and if) it becomes pressing again. |
It occurs to me if you did want to go down this route that something like SQLite may have already solved the main issues, and you could just store state in that. |
This commit adds support to allow specifying a custom output directory to Cargo. First, the `build.target-dir` configuration key is checked, and failing that the `CARGO_TARGET_DIR` environment variable is checked, and failing that the root package's directory joined with the directory name "target" is used. There are a few caveats to switching target directories, however: * If the target directory is in the current source tree, and the folder name is not called "target", then Cargo may walk the output directory when determining whether a tree is fresh. * If the target directory is not called "target", then Cargo may look inside it currently for `Cargo.toml` files to learn about local packages. * Concurrent usage of Cargo will still result in badness (rust-lang#354), and this is now exascerbated because many Cargo projects can share the same output directory. * The top-level crate is not cached for future compilations, so if a crate is built into directory `foo` and then that crate is later used as a dependency, it will be recompiled. The naming limitations can be overcome in time, but for now it greatly simplifies the crawling routines and shouldn't have much of a negative impact other than some Cargo runtimes (which can in turn be negated by following the "target" name convention). Closes rust-lang#482
This commit adds support to allow specifying a custom output directory to Cargo. First, the `build.target-dir` configuration key is checked, and failing that the `CARGO_TARGET_DIR` environment variable is checked, and failing that the root package's directory joined with the directory name "target" is used. There are a few caveats to switching target directories, however: * If the target directory is in the current source tree, and the folder name is not called "target", then Cargo may walk the output directory when determining whether a tree is fresh. * If the target directory is not called "target", then Cargo may look inside it currently for `Cargo.toml` files to learn about local packages. * Concurrent usage of Cargo will still result in badness (rust-lang#354), and this is now exascerbated because many Cargo projects can share the same output directory. * The top-level crate is not cached for future compilations, so if a crate is built into directory `foo` and then that crate is later used as a dependency, it will be recompiled. The naming limitations can be overcome in time, but for now it greatly simplifies the crawling routines and shouldn't have much of a negative impact other than some Cargo runtimes (which can in turn be negated by following the "target" name convention). Closes rust-lang#482
This commit adds support to allow specifying a custom output directory to Cargo. First, the `build.target-dir` configuration key is checked, and failing that the `CARGO_TARGET_DIR` environment variable is checked, and failing that the root package's directory joined with the directory name "target" is used. There are a few caveats to switching target directories, however: * If the target directory is in the current source tree, and the folder name is not called "target", then Cargo may walk the output directory when determining whether a tree is fresh. * If the target directory is not called "target", then Cargo may look inside it currently for `Cargo.toml` files to learn about local packages. * Concurrent usage of Cargo will still result in badness (#354), and this is now exascerbated because many Cargo projects can share the same output directory. * The top-level crate is not cached for future compilations, so if a crate is built into directory `foo` and then that crate is later used as a dependency, it will be recompiled. The naming limitations can be overcome in time, but for now it greatly simplifies the crawling routines and shouldn't have much of a negative impact other than some Cargo runtimes (which can in turn be negated by following the "target" name convention). Closes #482
Due to the high compile times, it's highly desirable to allow multi concurrent cargo operations - I have to do that to be able to compile google.rs in more reasonable times when deploying. So far, I have encountered issues with concurrent operations when updating the registry and when trying to compile the same thing into the same target-dir, especially if the latter is overridden to point to a shared location. It's my personal belief that cargo is important enough to at least learn to handle concurrent situations gracefully, and in my own workflow it would be great if cargo's could wait on a lock instead of just failing. The particular behaviour is something one would certainly want to keep configurable though. I don't know what your take on it is, but would you be interested in a contribution which allows processes to file-lock locations to learn handling concurrent operation in a configurable fashion ? |
I think I'd be fine with either strategy of waiting for a lock (but perhaps printing a message) or just failing if a lock couldn't be acquired. PRs are certainly welcome! |
Great to hear. I have been looking into it just to figure out if there is a good way to wait on a lock. On Unix, this is no problem, and a library already exists (even though the GPL license seems incompatible with cargo). On Windows, LockFileEx could certainly do the same, but it might be difficult to support all the toolchains cargo/rust supports. Part of me thought it would be easiest if this function would just be put into It seems the fastest way to get going with this is to start out with a license-compatible lock-file crate that handles the details, and bring it into cargo for first trials. All required functionality would have to be provided through custom bindings to the respective libraries. |
License updated to LGPL :) |
It's unclear to me how invoking cargo in parallel helps you at all. Cargo already parallelizes its build with The original impetus for getting this filed was that invoking Cargo from parallel make can invoke multiple Cargos. This was just an artifact of how make works, not a way to speed up the build. Are you using some top level build tool that is parallel and several cargo-built dependencies? |
Yes, that is what I do. Details can be found here in the 'How to reproduce' section. In short, I am building 78 programs which all have the same dependency chain. It takes 5m (debug) to 7m (release) to build. As some programs take an hour to build in release mode, I end up having 7 cores playing the idle game for that duration. It is truly in my interest to make this work better than it does now. A good workaround in the past was to run |
Another use case seems to be the atom editor with both 'linter-rust' (which runs cargo on file saves) and a 'build' plugin (which I like to set to save all modified files just before invoking cargo, too). This leads to random errors. It would be nice, if the cargo locking mechanism would 'wait' for a free lock (or at least could be set to wait with an additional flag). AtomLinter/linter-rust#15 |
I have written a tiny wrapper script for cargo on linux that waits for all previous processes to finish - to avoid the concurrency issues. :-) This should do the job - until cargo implements its own locking-mechanism. |
Awsome :) ! Considering I won't be able to work on the global lock implementation for a while, it's great to have alternatives ready for general use ! |
I'll admit I don't know enough about cargo to know if this is feasible, but mightn't it be possible for cargo to run concurrently (with possible duplicated work) through careful attention to creating files in an idempotent manner? e.g. always create files with a temporary name followed by rename(2)? Then you would never have a partial file to worry about. Of course, that only handles posix systems. Windows file system semantics are a hell you would still need to cope with, but one imagines that there may be ways to write sane software for windows. |
Windows can be made to use atomic renames, though you need to use Native API calls. |
I ran into this myself, mostly accidently, by running cargo build --release twice in the same directory at the same time, the error was pretty confusing |
I just ran smack into this while (finally!) writing integration tests for |
Cargo has historically had no protections against running it concurrently. This is pretty unfortunate, however, as it essentially just means that you can only run one instance of Cargo at a time **globally on a system**. An "easy solution" to this would be the use of file locks, except they need to be applied judiciously. It'd be a pretty bad experience to just lock the entire system globally for Cargo (although it would work), but otherwise Cargo must be principled how it accesses the filesystem to ensure that locks are properly held. This commit intends to solve all of these problems. A new utility module is added to cargo, `util::flock`, which contains two types: * `FileLock` - a locked version of a `File`. This RAII guard will unlock the lock on `Drop` and I/O can be performed through this object. The actual underlying `Path` can be read from this object as well. * `Filesystem` - an unlocked representation of a `Path`. There is no "safe" method to access the underlying path without locking a file on the filesystem first. Built on the [fs2] library, these locks use the `flock` system call on Unix and `LockFileEx` on Windows. Although file locking on Unix is [documented as not so great][unix-bad], but largely only because of NFS, these are just advisory, and there's no byte-range locking. These issues don't necessarily plague Cargo, however, so we should try to leverage them. On both Windows and Unix the file locks are released when the underlying OS handle is closed, which means that if the process dies the locks are released. Cargo has a number of global resources which it now needs to lock, and the strategy is done in a fairly straightforward way: * Each registry's index contains one lock (a dotfile in the index). Updating the index requires a read/write lock while reading the index requires a shared lock. This should allow each process to ensure a registry update happens while not blocking out others for an unnecessarily long time. Additionally any number of processes can read the index. * When downloading crates, each downloaded crate is individually locked. A lock for the downloaded crate implies a lock on the output directory as well. Because downloaded crates are immutable, once the downloaded directory exists the lock is no longer needed as it won't be modified, so it can be released. This granularity of locking allows multiple Cargo instances to download dependencies in parallel. * Git repositories have separate locks for the database and for the project checkout. The datbase and checkout are locked for read/write access when an update is performed, and the lock of the checkout is held for the entire lifetime of the git source. This is done to ensure that any other Cargo processes must wait while we use the git repository. Unfortunately there's just not that much parallelism here. * Binaries managed by `cargo install` are locked by the local metadata file that Cargo manages. This is relatively straightforward. * The actual artifact output directory is just globally locked for the entire build. It's hypothesized that running Cargo concurrently in *one directory* is less of a feature needed rather than running multiple instances of Cargo globally (for now at least). It would be possible to have finer grained locking here, but that can likely be deferred to a future PR. So with all of this infrastructure in place, Cargo is now ready to grab some locks and ensure that you can call it concurrently anywhere at any time and everything always works out as one might expect. One interesting question, however, is what does Cargo do on contention? On one hand Cargo could immediately abort, but this would lead to a pretty poor UI as any Cargo process on the system could kick out any other. Instead this PR takes a more nuanced approach. * First, all locks are attempted to be acquired (a "try lock"). If this succeeds, we're done. * Next, Cargo prints a message to the console that it's going to block waiting for a lock. This is done because it's indeterminate how long Cargo will wait for the lock to become available, and most long-lasting operations in Cargo have a message printed for them. * Finally, a blocking acquisition of the lock is issued and we wait for it to become available. So all in all this should help Cargo fix any future concurrency bugs with file locking in a principled fashion while also allowing concurrent Cargo processes to proceed reasonably across the system. [fs2]: https://github.com/danburkert/fs2-rs [unix-bad]: http://0pointer.de/blog/projects/locking.html Closes rust-lang#354
Fix running Cargo concurrently Cargo has historically had no protections against running it concurrently. This is pretty unfortunate, however, as it essentially just means that you can only run one instance of Cargo at a time **globally on a system**. An "easy solution" to this would be the use of file locks, except they need to be applied judiciously. It'd be a pretty bad experience to just lock the entire system globally for Cargo (although it would work), but otherwise Cargo must be principled how it accesses the filesystem to ensure that locks are properly held. This commit intends to solve all of these problems. A new utility module is added to cargo, `util::flock`, which contains two types: * `FileLock` - a locked version of a `File`. This RAII guard will unlock the lock on `Drop` and I/O can be performed through this object. The actual underlying `Path` can be read from this object as well. * `Filesystem` - an unlocked representation of a `Path`. There is no "safe" method to access the underlying path without locking a file on the filesystem first. Built on the [fs2] library, these locks use the `flock` system call on Unix and `LockFileEx` on Windows. Although file locking on Unix is [documented as not so great][unix-bad], but largely only because of NFS, these are just advisory, and there's no byte-range locking. These issues don't necessarily plague Cargo, however, so we should try to leverage them. On both Windows and Unix the file locks are released when the underlying OS handle is closed, which means that if the process dies the locks are released. Cargo has a number of global resources which it now needs to lock, and the strategy is done in a fairly straightforward way: * Each registry's index contains one lock (a dotfile in the index). Updating the index requires a read/write lock while reading the index requires a shared lock. This should allow each process to ensure a registry update happens while not blocking out others for an unnecessarily long time. Additionally any number of processes can read the index. * When downloading crates, each downloaded crate is individually locked. A lock for the downloaded crate implies a lock on the output directory as well. Because downloaded crates are immutable, once the downloaded directory exists the lock is no longer needed as it won't be modified, so it can be released. This granularity of locking allows multiple Cargo instances to download dependencies in parallel. * Git repositories have separate locks for the database and for the project checkout. The datbase and checkout are locked for read/write access when an update is performed, and the lock of the checkout is held for the entire lifetime of the git source. This is done to ensure that any other Cargo processes must wait while we use the git repository. Unfortunately there's just not that much parallelism here. * Binaries managed by `cargo install` are locked by the local metadata file that Cargo manages. This is relatively straightforward. * The actual artifact output directory is just globally locked for the entire build. It's hypothesized that running Cargo concurrently in *one directory* is less of a feature needed rather than running multiple instances of Cargo globally (for now at least). It would be possible to have finer grained locking here, but that can likely be deferred to a future PR. So with all of this infrastructure in place, Cargo is now ready to grab some locks and ensure that you can call it concurrently anywhere at any time and everything always works out as one might expect. One interesting question, however, is what does Cargo do on contention? On one hand Cargo could immediately abort, but this would lead to a pretty poor UI as any Cargo process on the system could kick out any other. Instead this PR takes a more nuanced approach. * First, all locks are attempted to be acquired (a "try lock"). If this succeeds, we're done. * Next, Cargo prints a message to the console that it's going to block waiting for a lock. This is done because it's indeterminate how long Cargo will wait for the lock to become available, and most long-lasting operations in Cargo have a message printed for them. * Finally, a blocking acquisition of the lock is issued and we wait for it to become available. So all in all this should help Cargo fix any future concurrency bugs with file locking in a principled fashion while also allowing concurrent Cargo processes to proceed reasonably across the system. [fs2]: https://github.com/danburkert/fs2-rs [unix-bad]: http://0pointer.de/blog/projects/locking.html Closes #354
This seems to be still an issue on Windows(with stable MSVC at least). I am running Massive linker error for anyone interested:
```
error: linking with `link.exe` failed: exit code: 1104
|
= note: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.37.32822\\bin\\HostX64\\x64\\link.exe" "/NOLOGO" "C:\\Users\\galu\\AppData\\Local\\Temp\\rustcAPSE4G\\symbols.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.10iww0923dj9tog0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.114bdckgawviv0gn.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.11onf3pojrj2r4h.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.127fb0u60gzc49nc.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.12bwi8jfxor73xqg.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.143w88bck9ul8lph.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.14zvmo82dizc6c6s.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.15s1th140qaj89o.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.15sp88d1p7pntsue.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.15zxtqpmc2v5j092.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.17ryyk8glye6r1p4.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.19u6icr272q7hvq6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1bljd5xjcm0eplpi.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1cetcqtkex8iqxux.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1d79jwq9abt1n5cj.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1do1gdx5q04xs8p7.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1dterskob7pakofz.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1eckqm7zk7heee9w.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1eexembpl99g1l5m.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1eqe0eaje1weebic.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1eu91w38m2iwkm6y.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1hcref6s1l4u6n3l.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1idqz8s4brgij0g6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1j8okkr4jey7olar.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1k8f0gk6708jaqh0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1kkplxkgfxb552p6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1lc5ay1sfdt3s3li.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1m2as7k9y8muxmnx.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1nuoq4se05szl2qj.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1o9rjod5qxscm6mc.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1obikn8hi2kur5uv.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1ogj36uhcqz53v30.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1os81k01pr6l20l8.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1ozng2jp1w9j0zey.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1pbpals8bzxavlnh.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1q8oam9431idrsd0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1qih8g27rcrglwwm.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1rop7tura7pq8nrl.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1rvlwl6gcpl5ybrb.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1sn038xjjcr23d7s.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1swyv916ubxwblgc.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1uzkh3whbk3wvuo5.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1uzs4l7xmnatw4ta.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1vn6orvvk2e19h16.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1wgu2x2hpsg2xdmu.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1xc13lsz1ofy0wwm.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1z59dnv4xfif3w2x.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1z6o2skyqlr29gt.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.1zcmhf0s5tnbdt4m.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.20c2nc19wbulu6ru.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.20sqixpxukh1dw8w.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.21ixn7f78xuu09kv.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.220rguo8zd16vnkd.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.226e8k987f9jzx8q.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.22qs427ed22o6k36.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.23epjsv8dgqnf6e9.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.23xugx99n5kx9ese.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.259eqs4v5zne0fds.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.25qp0zmrguehpy43.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.26wszz29fa65p4ws.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.26yrlhmrb39trdxr.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.26zmquha2hdxlusv.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2ab8q8rx0fo2ncdi.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2ajtkazks7jzlozr.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2ajzvrouy5xyrzxj.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2asf3lzzz65m2z0y.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2bm998tyl0np7w0u.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2bozcif75pkr0yr1.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2d0xlkv4trpu828v.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2giebjgvu2jnbbd6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2hxb7rqu9v606brx.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2ibc7i7lae0dsgi6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2j5n0eubu3zjxacw.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2j5vp191t00joqa8.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2kexzzooz7jp34aw.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2kfxdz7ayicex1b1.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2kooiwxwko8qnkok.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2o6m9w2j1a01x2rf.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2oi2hethbfqqr0ud.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2om2r9mwvx5ipkik.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2pwr1f4gehjns26f.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2q9f6pok0dg2jecz.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2qr2hy9u7keytmq4.rcgu.o"
"C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2s1mtuy2naw6f9ul.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2s4cwj9uwwbxeet3.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2s8okm079fxzey43.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2sbn9lspv8u0nkhj.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2t2pmg482rjyo9y9.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2t6al4g9s07ld2ka.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2tfvzz25l6rkndz2.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2uh8gy72flwahbqn.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2uxc6kc9gafk3f9i.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2vus1bsvhst1anh9.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2vwnyh2wykeubji.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2w30nugxf3pvfsas.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2wakkt7gsj9b1a8v.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2x9of39kbrtluxmo.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2xek4y3z4ew3wjhk.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2xvmemwri48oriu3.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2ygp8v2nlyrwf0bd.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.2zmoyfu2mufwss6u.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.30asnl8nzxu5g587.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.30rox2pcjaxsexdn.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3116htxzxsivwty4.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.31i4lu13fzjgvkoi.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.32178h1hba6vn27n.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3228yuq27a1tr0z9.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.32c6ute1k83ovc14.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.32mc8sk0bll86s66.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.34jh3c70m73rf3di.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3516tjzsueyfrq6j.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.35dp4735cx8riehq.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.35eyy70qxqf3u0vy.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.35qb4exhpih833da.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.36tbv6zf8qy41vv5.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.37n1up843y9bonwr.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.390ie738ztkjhdc6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.394n447ttejxuft9.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.39nu2q58zmfvae8n.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3bapujvj8vf1htqs.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3c82gald41ljlftm.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3cgtu816tph4owm0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3dl9wasjyp2lvdn7.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3eem1odovczaq5na.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3ftuvrm571v4j4y.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3g6i6wlsk9h3mfzd.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3gxx3y7me7gvx1xc.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3j9qdtddrwytuye6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3jx95itz2beh1n1t.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3kvsmbug5qq1l4ew.rcgu.o"
"C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3lfk94ungl0g0xe0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3mfw56jj5y12tp1y.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3mluncjnajm4o4s6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3npcfpyn5j47y2cd.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3t27gx0x4vee2vtm.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3t4uzqt4hk0a7jxb.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3ufhvhphmtuofq5u.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3umxm3k9xtte9rzd.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3unqko9fre73g76n.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3utt2n4a6r6eotcc.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3uxft40vlzl5ebh3.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3v6m3bce8bpcnnq0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3v7a93dao82xtbpr.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3v8ioy1gg5t7hs70.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3y36dpgcbwbngjur.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3y5xtwu89pklsi27.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.3zymh7zemo9s5ch8.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.40xd047t05prl529.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.41q1e9dlyqyegh7j.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.42n93eophumu8wdn.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.42s4y9hgkphg8lge.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.431s7kvn0zvpy7pz.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.452z18is6ss00zax.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.45i224ouwjbpeevf.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.45l1j7eu337t027d.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.462b76es4vqsp36u.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.477svi9rz3neb8re.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.49fww5pdfgyzokgt.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4asy0fwa2ud81y57.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4c8iwpg88y3v2n69.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4dn4sef2wnlah1dn.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4ds5cs3homep0m5a.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4e9v0stwq8d16a39.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4e9x1ncl0qjpgzyw.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4ebgxxa923yey8g1.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4evlr78cj8pf4o8t.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4gesgm84i8jddvyd.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4i8zlh73knnmh79y.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4ifu8oqkbxl52lf0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4jx8qjz899ognhhi.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4k0ocy6dtvgvzn10.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4l8tg1csmd6uurcw.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4lbh0pahtzx5bz1f.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4nb1oo2pifjoaxwa.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4new1kk239ei0ljx.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4p0cy455pulwcewt.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4rraccziqg2zqond.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4s1blp555fb0i12b.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4s708r75zjdqrdi1.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4us2hhj1dm07vvk9.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4vqoyh2xf8z8ucym.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4wrlpr7c86k6b1mb.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4xj6j8r2ewdfi7j2.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4xwgnfhvmx8d48x8.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4zjd3gjscghjxhci.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5162g7je9aehhbig.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.51zdxz4ilu7goxf1.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.52j48g3u9pd883f0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.52uil9ejgkyiru5k.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5417ef8c85t9oyf.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.54prc0nwxq66r34z.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.56rm0r5a10fthrhw.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.56yd4lma4gpzr5fc.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.57gmwmubn26q73g9.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.57jv0f1fjqeo6355.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.58d3pipmd92io2mb.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.59s3n2b22h7ujqne.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5ad49svb5wo40mzb.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5bc6wb2o9lrnv9ur.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5bt6lzrdixxlwex3.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5bxg0eqpdxlif56t.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5ciilkyjbpbiqgbm.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5dhan0is8metdmix.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5dlqdhr4daeb29bg.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5en014s31abf08au.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5errnxiwoagz6sl1.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5fegxbuvh6uin6zh.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5gcaxhfo24s9ve7v.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5iggsjfdf676rm0.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.5j7undsm4ajo42q.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.67m3i3er48lcjrm.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.6h56z9gptbopdhm.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.75jp7aq4jln3iwk.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.76l620ajcr1cgm6.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.7avb35isrscyao2.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.7s09yfzqvsr641h.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.7v0r63nhozlxv3d.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.805nh7u0di22f2u.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.9aqsm12nn4w64me.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.9hnrgmcxxep6724.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.9vkfmhdgkej2qzx.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.aalqj4a6ehu8qmf.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.c2w5fcfu97teg2i.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.c9ktmumqljgc11t.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.chno5gqaoniy6ty.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.ddmy2q94jda5d9g.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.ewosanysvip4ctg.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.gmghpgcj4bbs5aa.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.ijzp60e28igbj3b.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.jl7edi58kv8pwhp.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.jwfvocvvcn6q68m.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.jz0iglw97xm2icy.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.l53bmi4ge77posk.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.nnhgqbzpafzziw2.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.o8omv1eotein3op.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.oio0keqelxkp7df.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.p2gqqsr59h1hue5.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.q3h8zfkn7f6966l.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.qfbg9xp1pqkb9q5.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.r05ub1ebi9yidga.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.r5jpwah3ax3qr37.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.rkxs0t85tvxu26z.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.s9e87jd37qnctdb.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.sguodox1d0u146q.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.u0j8ufdizy9abwy.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.u4of11919amn2bt.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.vkw8qcr2eyv0fcp.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.vxkh0dqkaaa44y4.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.wi1fm8uw9x14u6a.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.wisf43dn7v63271.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.ydjnc027omj819v.rcgu.o" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.4pve5oh6pr1dea3e.rcgu.o" "/LIBPATH:C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps" "/LIBPATH:C:\\Users\\galu\\scoop\\persist\\rustup\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\windows_x86_64_msvc-0.48.2\\lib" "/LIBPATH:C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libaxum-35ac33898af3d87d.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libmemchr-e7aea2fa15cb90be.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libpercent_encoding-ee305937f68cd7f9.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libmatchit-910947aaa714646f.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libbitflags-dd03df63ab3af0c7.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libserde-2e647280ae0ab4ee.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libhyper-875642f6676aa98e.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libwant-0be2345c03c20607.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libtry_lock-61b422e12f33a8b6.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libsocket2-b5b17e680bcfdbd1.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libwinapi-14529d62629a9878.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libhttparse-d9cf436917a43dad.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libh2-0663554d4eddeb1b.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libindexmap-510aa7b073e9a331.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libhashbrown-8110dd609f68b340.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libslab-b819d05476a3d975.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libtokio_util-b9ac323b572311f6.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libfutures_sink-90f20920e54d57ca.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libtracing-89fa694fb586a454.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libtracing_core-bf25df9667e72b8b.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libonce_cell-149d65cc551b495e.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libfutures_channel-e06bc576058579cc.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libhttpdate-f747e55dda61c390.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libsync_wrapper-a8265b8e09fd9fac.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libaxum_core-b0d55e64db847365.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libmime-64bdf90f51067f55.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libhttp_body-47f26274946434af.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libtower-7279d0cd754509b7.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libpin_project-09884400d6010f05.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libtower_layer-e8f64e9afbc30ad5.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libfutures_util-1b811b09a3a2c7d3.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libfutures_task-d6fcc7b074ff8914.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libpin_utils-2a8d477be5834f80.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libfutures_core-1a74c51c7dc95615.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libtower_service-24fa779054e203f2.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libtokio-574f0796ba43a64a.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libnum_cpus-e7eaa7e1de7f54bc.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libsocket2-ba7af30c293adca2.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libmio-71242b7cf588b7df.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libwindows_sys-444692091506d71a.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libpin_project_lite-ba4598f93cecad12.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libparking_lot-e5ded3b0eaf647a0.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libparking_lot_core-0f076e00b34b6714.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libwindows_targets-6616f18a4c162f0e.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libcfg_if-54ba3767ec7b107d.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libsmallvec-88f8067fbfda0ec6.rlib"
"C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\liblock_api-5676389690e76472.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libscopeguard-7ddd7c28765ad6c5.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libhttp-ae366dc950d8a2b7.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libitoa-0b7ee1645c5b6739.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libbytes-105c7ca7a27154e2.rlib" "C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\libfnv-f13147bc191ae750.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-287abad1c0bdb9b8.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-070c3734740ed997.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_demangle-66a2a6c345ea9966.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd_detect-33c6cc56f7d1acea.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libhashbrown-f19d11c8f87bcdbf.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_alloc-3928c78544f9c50c.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-8e773ac5f89895a1.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcfg_if-fe105a06c709339c.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liblibc-a43d961d9021468a.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-d495230ba17bce41.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_core-608b311ffd8bf0dd.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-63e11cc35aa38f19.rlib" "C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-9dbc16e13c04d841.rlib" "advapi32.lib" "cfgmgr32.lib" "fwpuclnt.lib" "kernel32.lib" "ntdll.lib" "user32.lib" "ws2_32.lib" "ntdll.lib" "windows.0.48.0.lib" "windows.0.48.0.lib" "kernel32.lib" "advapi32.lib" "bcrypt.lib" "kernel32.lib" "ntdll.lib" "userenv.lib" "ws2_32.lib" "kernel32.lib" "ws2_32.lib" "kernel32.lib" "msvcrt.lib" "/NXCOMPAT"
"/LIBPATH:C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "/OUT:C:\\Users\\galu\\Documents\\projects\\fst\\target\\debug\\deps\\fst.exe" "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\galu\\scoop\\persist\\rustup\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis"
= note: LINK : fatal error LNK1104: cannot open file 'C:\Users\galu\Documents\projects\fst\target\debug\deps\fst.exe'
```
|
@gluax, sorry to hear about that. Since this is an 7-year-old issue, would you mind opening a new issue with a minimal reproducer so people can take a look at it? |
Cargo does a number of unsynchronized and racy operations that lead to lots of badness if they happen concurrently. This includes, but is not limited to, management of
target/
, checkouts into~/.cargo/git/
, and anything having to do with concurrent compilations.The only real reasonable solution I can think of to this is the same as the "big hammer" solution which is to just "add a lock to everything". Ideally we would separately lock
~/.cargo
and the local directory, but they should both in general be locked when performing any action.The text was updated successfully, but these errors were encountered: