profile
viewpoint
Chris Down cdown @Facebook London, England https://chrisdown.name I keep @facebook and @Instagram running as part of Facebook's Linux Kernel team, and also help maintain @systemd. I mostly work on kernel memory management.

cdown/clipmenu 549

Clipboard management using dmenu

cdown/clipnotify 97

Notify on new X clipboard events

cdown/ansible-desktop 55

Ansible playbook for my personal machines.

cdown/dwm 26

Dynamic window manager for X (with extensive customisation)

cdown/ansible-aur 24

An Ansible module for the pacaur and yaourt package managers.

cdown/gh-mirror 19

Mirror all GitHub repositories for a user, maintaining metadata.

cdown/aur 15

Arch User Repository API interface.

cdown/cellout 15

Battery status in the console (Linux only).

cdown/btmenu 10

Control bluetooth devices with dmenu

cdown/dotfiles 10

My configuration files

push eventcdown/dotfiles

Chris Down

commit sha 7367d17eca23c85a4cd943f79d0b0f43abf1641b

redshift: Use less aggressive settings for new ultrawide

view details

push time in 7 hours

push eventcdown/dwm

Chris Down

commit sha e4eeea6080640858bbd8cfb42addedfecab66855

Add gaplessgrid layout

view details

push time in 10 hours

push eventcdown/dwm

Chris Down

commit sha 9b6bab6f0600ed77946ee158003ba8e9cfec64a7

Add grid layout

view details

push time in 11 hours

push eventcdown/dwm

Chris Down

commit sha 85f689353e7f97a39fe2b8fbdeae14cde436c915

Add grid layout

view details

push time in 11 hours

push eventcdown/dotfiles

Chris Down

commit sha 6fd5c634e1a843f3d37a99b3432232595de285cd

vcs aliases: Add hnb

view details

push time in 16 hours

pull request commentsystemd/systemd

service: Check for existing racy SIGCHLD for non-aliens

I spent an hour or so trying to find a reproduction, but no dice. This service uses a bunch of less-common options (DeviceAllow, DevicePolicy=closed, KillMode=mixed, MountFlags=slave, long TimeoutStopSec), so it may be related to those instead of the previously mentioned issue. However, despite trying to recreate the environment as closely as possible on my local machine, I've not yet been able to reproduce it.

cdown

comment created time in 2 days

pull request commentsystemd/systemd

service: Check for existing racy SIGCHLD for non-aliens

Unfortunately right now I don't have any simple reproducer, but we've recently isolated another issue related to their use of daemon-reload (prematurely deleting a parent slice, then daemon-reloading). Unclear if it's related, but the issue seems to have gone away along with that mitigation. Hopefully I'll get time to investigate a little further soon.

cdown

comment created time in 2 days

create barnchcdown/linux-mmots

branch : cdown/online_swap_resize/2020-10-20

created branch time in 2 days

push eventcdown/ansible-desktop

Chris Down

commit sha 5ecb2fe9712f28baa7573f25081839c9cc118b51

Allow MSR writes

view details

push time in 2 days

push eventcdown/chrisdown.name

Chris Down

commit sha d107c9ddc41de4e7bd41b5c9a67028f2678943a9

rym: Update from rym-export

view details

push time in 2 days

push eventcdown/dotfiles

Chris Down

commit sha 263bb868a9899b303ba9024b6c12150a735f798a

pdf-to-png: Use %02d format

view details

Chris Down

commit sha 82fc45f9095418e344dba73b1dd936cfe180273b

dunst: Widen up geometry a bit for Inconsolata-g

view details

push time in 3 days

push eventcdown/clipmenu

Chris Down

commit sha 9d0da2f7d4d17c7dff616c52dc00bd5b32f61bc5

clipmenu: Don't mask -h Fixes #142.

view details

push time in 3 days

issue closedcdown/clipmenu

Clipmenu help conflicts with dmenu -h flag

In clipmenu, help will be displayed when using --help or -h. As seen in the code here: https://github.com/cdown/clipmenu/blob/764984c98285fc9071bd296fadec64d81681d7ea/clipmenu#L14

However, if we are using dmenu's line height patch https://tools.suckless.org/dmenu/patches/line-height/, then it will conflict since it uses -h flag to determine the height.

Suggestion: The easiest way would be to simply remove getting help from -h as --help would work anyway. Let me know if there's a different way we can solve this issue.

closed time in 3 days

samyak-jain

issue commentcdown/clipmenu

Clipmenu help conflicts with dmenu -h flag

Oh sure, that's fine then. I've just removed it.

samyak-jain

comment created time in 3 days

issue closedcdown/clipmenu

Clipmenu doesn't function correctly when started using systemd service

OS: Arch Clipmenu 6.1.0

Clipmenu doesn't seem to work correctly when started using systemctl --user enable clipmenud. After restarting, clipmenud seems to be running (+clipnotify as well), however clipmenu is not able to copy any text.

systemctl_clipmenud_status

closed time in 4 days

marc1984

issue commentcdown/clipmenu

Clipmenu doesn't function correctly when started using systemd service

Closing this since, judging by the thumbs up, that explains what's going on. The X server must be started before clipmenud so that systemd knows the $DISPLAY to be pushed into the environment.

marc1984

comment created time in 4 days

issue commentcdown/clipmenu

Clipmenu doesn't function correctly when started using systemd service

That's way too late to import, you need to do it prior to starting systemd. Exit code 2 literally means "$DISPLAY is unset" :-)

marc1984

comment created time in 5 days

push eventcdown/clipmenu

Chris Down

commit sha 764984c98285fc9071bd296fadec64d81681d7ea

clipmenu: Explicitly handle no $cache_file case

view details

push time in 5 days

push eventcdown/clipmenu

Chris Down

commit sha 8538e01e5c3dff35172789e946d1a60df4ed658b

readme: Add information about $DISPLAY

view details

push time in 5 days

push eventcdown/clipmenu

Chris Down

commit sha c837fec68a2761132ad08f3a4f647f9816561b50

readme: Add information about $DISPLAY

view details

push time in 5 days

issue commentcdown/clipmenu

Clipmenu doesn't function correctly when started using systemd service

Are you sure your $DISPLAY is set correctly with systemctl --user import-environment DISPLAY or similar?

marc1984

comment created time in 5 days

issue commentcdown/clipmenu

Clipmenu doesn't function correctly when started using systemd service

What's your current $DISPLAY? Is it the same as in /proc/23293/environ?

marc1984

comment created time in 5 days

push eventcdown/ansible-server

Chris Down

commit sha e58a05e0b22e06897a456af1065bff9e686887a6

Explicitly install base

view details

push time in 6 days

push eventcdown/ansible-desktop

Chris Down

commit sha dc45ef24e73788869f9dbdfe537aab19946cb573

Explicitly install base

view details

push time in 6 days

push eventcdown/pkgbuilds

Chris Down

commit sha c5b4491b2495f72ce41ea8d52e53f7412e1679c8

upgpkg: nota 1.6.0-1 upstream release

view details

push time in 6 days

created tagcdown/nota

tag1.6.0

Simple note taking using your $EDITOR and git

created time in 6 days

push eventcdown/nota

Chris Down

commit sha 3d171fc913b78af6f4bb9e2e879a7af1030d425a

Use mkdir atomic locks instead of flock This is a lot easier to reason about, compared to FD inheritance, etc, etc...

view details

push time in 6 days

push eventcdown/nota

Chris Down

commit sha 644f7c618504943676004fd1aa36764556636ee1

Move to bash No real reason to restrict ourselves, and this will be useful for the mkdir lock style with globbing check.

view details

Chris Down

commit sha 44e3c5861b49ded19a6772241d480bfe6ae27503

Allow "today" as an input

view details

Chris Down

commit sha a3469e1fb0c92465919e152425f138168e4ca152

Don't set GIT_DIR and GIT_WORK_TREE We've cd'ed into the dir for a while now, so these aren't necessary any more.

view details

Chris Down

commit sha c37770271ede9f2dfc8c10ff69ce0e8bb8730e23

Remove some obvious comments

view details

Chris Down

commit sha 95062645e7f57355c40b400ad766988608064e65

Use mkdir atomic locks instead of flock This is a lot easier to reason about, compared to FD inheritance, etc, etc...

view details

push time in 6 days

issue commentcdown/clipmenu

Clipmenu doesn't function correctly when started using systemd service

Can you please try to reproduce with 6.2.0? There are a number of changes in there.

Other than that, can you please run with CM_DEBUG=1, and report the output of journalctl -u clipmenud for that session? :-)

Also, does clipnotify change PID?

marc1984

comment created time in 6 days

issue commentcdown/clipmenu

Clipboard items should not be indexed solely by first line contents and number of lines

This was initially a design decision rather than a bug, but yes, it's worth reevaluating now that we have better indexing time complexity.

Probably we can just also bunch the timestamp as part of the checksum. That will require some work on the vacuuming logic as well though.

NickHu

comment created time in 7 days

issue commentcdown/clipmenu

Clipmenud not responding to systemd SIGTERM.

Hmm, looks like a different issue then. Feel free to file if it's still happening for you, there are a couple of fixes for stuff which went out in 6.2.0 :-)

Filip62

comment created time in 7 days

push eventcdown/pkgbuilds

Chris Down

commit sha 051512744d293df708c5f570cea65fe2272acb40

upgpkg: clipmenu-git 6.2.0.r0.g7c34ace-1 upstream release

view details

push time in 8 days

issue closedcdown/clipmenu

Clipmenud not responding to systemd SIGTERM.

OS: Arch Linux Clipmenu: 6.1.0

My system started taking a long time to shutdown because systemd was running a stop job for 1m30s for a program of my user session. After quite a bit of debugging I found that clipmenud was not exiting on the SIGTERM that systemd sent.

# Kill all background processes on exit
trap 'trap - TERM; kill -- -$$' INT TERM EXIT

After I changed it to this: (removed the dash in front of $$)

# Kill all background processes on exit
trap 'trap - TERM; kill -- $$' INT TERM EXIT

My system shut down properly.

Though while I was debugging this I noticed that while it does terminate the clipmenud process, the clipnotify process clipmenud spawned does not get terminated, so if I run clipmenud again, it complains that another clipmenud is running, but it is not, just the clipnotify process that was spawned by the first clipmenud and did not get terminated.

closed time in 8 days

Filip62

issue commentcdown/clipmenu

Clipmenud not responding to systemd SIGTERM.

Yeah. 6.2.0 is now out, although this shouldn't affect many people hopefully. Let me know if there are any problems :-)

Filip62

comment created time in 8 days

push eventcdown/clipmenu

Chris Down

commit sha 7c34ace1fbab76eb1c1dc9b30dd4ac1a7fe4b90b

Merge branch 'release/6.2.0' into master

view details

push time in 8 days

created tagcdown/clipmenu

tag6.2.0

Clipboard management using dmenu

created time in 8 days

push eventcdown/clipmenu

Chris Down

commit sha ee11a09fb0584dc2d083afc7e6f69e407cd4f76e

Add $DISPLAY check Fixes #131.

view details

Chris Down

commit sha 358f796d4cfe398159c59a9c2ad3bde18fa504a7

init: Don't set $DISPLAY Nowadays the desktop pushes the appropriate DISPLAY and WAYLAND_DISPLAY values into the per-user systemd environment, so this isn't needed. Also see #131.

view details

Chris Down

commit sha 64661dffbf8f285f76fcc9e4c11e21b1c2429e69

clipdel: Recreate cache_dir After 80b697edd2, this is required. Fixes #133.

view details

Jörg Thalheim

commit sha 443b58583ef216e2405e4a38d401f7c36386d21e

Makefile: install into PREFIX

view details

Chris Down

commit sha f3f7af50a0c97aa224bb009d308d5a1027c1ff66

Merge pull request #135 from Mic92/makefile Makefile: install into PREFIX

view details

Chris Down

commit sha 53215efd838aa0bbb1c2c9092fa8638e7580c897

init: Add TimeoutStopSec

view details

Chris Down

commit sha 9c7f1b9bf3697ac72c5ae0c7ab0d7207f88d1520

clipmenud: Don't assume that we're the process group leader We usually are, but this is more robust in light of #139.

view details

Chris Down

commit sha 7c34ace1fbab76eb1c1dc9b30dd4ac1a7fe4b90b

Merge branch 'release/6.2.0' into master

view details

push time in 8 days

push eventcdown/clipmenu

Chris Down

commit sha 53215efd838aa0bbb1c2c9092fa8638e7580c897

init: Add TimeoutStopSec

view details

Chris Down

commit sha 9c7f1b9bf3697ac72c5ae0c7ab0d7207f88d1520

clipmenud: Don't assume that we're the process group leader We usually are, but this is more robust in light of #139.

view details

push time in 8 days

issue commentcdown/clipmenu

Clipmenud not responding to systemd SIGTERM.

I'm still not entirely sure how it happens that we're not the process group leader in an interactive session, but it's true that if there's a wrapper script or something else in the way, it might not work out.

@Filip62, can you please try 8d29b2aaf841d5346dbcc2c5e18cde4f662807f1 and let me know if it fixes your problem?

Filip62

comment created time in 8 days

create barnchcdown/clipmenu

branch : cdown/timeoutstopsec/2020-10-14

created branch time in 8 days

issue commentcdown/clipmenu

Clipmenud not responding to systemd SIGTERM.

This looks like a totally separate issue, but what does sed -nz /DISPLAY/p /proc/1108/environ say? Is that right value?

Filip62

comment created time in 8 days

issue commentcdown/clipmenu

Clipmenud not responding to systemd SIGTERM.

And wait, why are there two clipnotify daemons? That doesn't make much sense. clipnotify is explicitly awaited with waitpid, so it shouldn't be possible for two to run at once.

Filip62

comment created time in 8 days

issue commentcdown/clipmenu

Clipmenud not responding to systemd SIGTERM.

I'm moderately confused that this pid isn't the same as the pgrp, but what's actually at pid 628?

Either way, we can manually check the pgrp when shutting down, instead.

Filip62

comment created time in 8 days

issue commentcdown/clipmenu

Clipmenud not responding to systemd SIGTERM.

That's not a bug, -$$ means "terminate all pids with PGID $$". Which processes are still running after the SIGTERM?

Filip62

comment created time in 10 days

push eventcdown/dotfiles

Chris Down

commit sha 1c7dab217a9f21ef097c741e070917de2d407154

pdf-to-png: Use 1080

view details

push time in 15 days

push eventcdown/ansible-desktop

Chris Down

commit sha 5d8c4be0bb66bec789128cb18ace38a65559cbc7

Install git-trim

view details

push time in 16 days

startedstefanha/git-publish

started time in 17 days

push eventcdown/dotfiles

Chris Down

commit sha 547089e287a00b468c48ba2ff1fb94c78a91c23a

fpmip: Explicitly look for space or EOL Needed to find ttf-inconsolata vs ttf-inconsolata-g

view details

push time in 17 days

push eventcdown/ansible-desktop

Chris Down

commit sha 84a649717b9a918e4d3d6fab0c0975aee5672333

Don't try to remove dmenu-git

view details

push time in 18 days

push eventcdown/chrisdown.name

Chris Down

commit sha e4c3a287acb72e505e863d469d0592078a036273

mutt post: Update binding

view details

push time in 20 days

push eventcdown/pkgbuilds

Chris Down

commit sha 67d0b1b3a0f00e8992c4ad93fe0ef8b7304b9c13

upgpkg: btmenu 1.2.0-2

view details

push time in 22 days

push eventcdown/pkgbuilds

Chris Down

commit sha bef98f640c4f89f9546427a2fa38a9757498821e

upgpkg: plenv 2.3.1-1 upstream release upgpkg: sxiv-photoorg-git 0.r755.4772390-1

view details

push time in 22 days

push eventcdown/clipnotify

Leonardo Taccari

commit sha a9faca40b3929f22ad1e21c071c853af47b0b7bc

Honor DESTDIR and PREFIX in {un,}install

view details

push time in a month

PR merged cdown/clipnotify

Honor DESTDIR and PREFIX in {un,}install

This should make `install' target usable on most package systems (that could use DESTDIR and can possibly customize their PREFIX).

+6 -2

1 comment

1 changed file

iamleot

pr closed time in a month

pull request commentcdown/clipnotify

Honor DESTDIR and PREFIX in {un,}install

Thanks.

iamleot

comment created time in a month

pull request commentcdown/clipnotify

Improve manual install experience.

The readme change is still fine though, although it probably shouldn't explicitly call out Debian-specific stuff.

markstos

comment created time in a month

push eventcdown/nota

Chris Down

commit sha 02fe5d4b5db2dc67c709c818749474765ecea7cb

readme: No need to discuss implementation for NOTA_READ_ONLY

view details

push time in a month

push eventcdown/clipnotify

bloodstalker

commit sha 55307a71cbc5d517ff311ea4adf1501717eb0fcf

added an install, uninstall and clean command.

view details

push time in a month

PR merged cdown/clipnotify

added an install, uninstall and clean command.

Like the title says, added an install, uninstall and clean command. Also thank you for the handy tool.

+9 -0

1 comment

1 changed file

terminaldweller

pr closed time in a month

pull request commentcdown/clipnotify

added an install, uninstall and clean command.

Thanks! Right now it's mostly up to the distro what to do, but this is fine too.

terminaldweller

comment created time in a month

push eventcdown/ansible-desktop

Chris Down

commit sha bd4a721cbdacbb5de1b7b21eb98ada2bd19b6b27

Replace dmenu-git with dmenu now that XFocus bug is done

view details

push time in a month

push eventcdown/chrisdown.name

Chris Down

commit sha ed72ab0574bd53a12c314487c1eaa4eb9170fb7c

windows: Mention mitigations

view details

push time in a month

push eventcdown/chrisdown.name

Chris Down

commit sha 0008d61458b5c751ddb8e02f27edfc6c96fe2bb2

css: Remove "inherit" rules These have nothing to override now.

view details

Chris Down

commit sha 4b4ab3be2bffbd0593cac2880826bc473c33930d

og: Define og:url

view details

Chris Down

commit sha 6dc1790aa306bf58f31ec77e37881d976c1691a7

windows: Mention mitigations

view details

push time in a month

issue commentsmacke/ffsubsync

increase tolerance of srt parsing

Let me know if you need any help. The srt library is already supposed to be as tolerant as possible -- more than happy to add support for more common errors.

smacke

comment created time in a month

push eventcdown/dwm

Chris Down

commit sha 57e031cdb09b9fa10b8b56e7c355eb5929c430ab

readme: Note about constant folding

view details

push time in a month

issue openedcdown/chrisdown.name

Send charset back in Lambda

We define this in the HTML, but this avoids double rendering.

created time in a month

push eventcdown/chrisdown.name

push time in a month

push eventcdown/chrisdown.name

Chris Down

commit sha 56d70dd67f518b0bdc1076964dad289f04b2e91f

Quickcheck -> QuickCheck

view details

Chris Down

commit sha 404444ca13736f73b68a2563cafb76a4a3f2355a

index: Add dunst

view details

push time in a month

push eventcdown/chrisdown.name

Chris Down

commit sha a518c7b2260b9d1168e995306132bd5c065f84fd

desc: more than 2 billion -> almost 3 million

view details

push time in a month

push eventcdown/chrisdown.name

Chris Down

commit sha 2781b53e7f3bad201993cdff0caa41ef10a11788

Fix broken links found by brokenlinkcheck.com

view details

push time in a month

push eventcdown/chrisdown.name

Chris Down

commit sha fa29f27ce804f87f7251b8849300711b0ff24084

footer: scr.im seems dead, move to Spamty

view details

push time in a month

issue closedcdown/clipmenu

Keep clips from previous sessions

Is it possible to not clean the clipmenu at reboot?

closed time in a month

se7en-x230

issue commentcdown/clipmenu

Keep clips from previous sessions

Sure, just set your CM_DIR to somewhere that's not volatile :-)

se7en-x230

comment created time in a month

push eventcdown/dwm

Chris Down

commit sha 68dcfc39a535b09c22eb60fc7b23e848803d72c4

zoomswap: Don't refocus This is more in line with the autowarp for everything else.

view details

push time in a month

push eventcdown/dwm

Chris Down

commit sha 2e3ca7b45cf5b2b7bee4b77b43cdcec31d9e6a7f

Apply zoomswap patch Not a big deal, but kind of nice to have.

view details

push time in a month

pull request commentsystemd/systemd

service: Check for existing racy SIGCHLD for non-aliens

hmm, does the reproducer involve daemon reload? maybe something is reloaded incorectly there and the assumptions we make about how this fields are initialized together aren't true anymore?

Not intentional daemon-reloads, but they might be done by configuration management in the background (although that's true across the fleet, and this only affects one very specific tier).

hmm, does the service that triggers this use PID file or an sd_notify() message with MAINPID=? maybe we update the PID after we already decided the service is down?

No sd_notify or pid file, it's Type=simple. Here's a pared down view of the unit file:

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=...
KillMode=mixed
MountFlags=slave
Slice=foo.slice
TimeoutStopSec=[fairly large value]

[X-FB]
...

I now wonder to myself whether this could be made worse by TimeoutStopSec. Even though the cgroup is already empty, maybe we don't recheck something until TimeoutStopSec time?

cdown

comment created time in a month

pull request commentsystemd/systemd

service: Check for existing racy SIGCHLD for non-aliens

Hmm, now you mention it, that doesn't make much sense indeed. This just appears to "fix" the issue because now main_pid_good is always false, so we don't enter whatever pathological logic resulted in the bug in the first place.

I can reliably reproduce this issue (albeit the reproduction requires a lot of state, so I can't trivially tell you how to externally reproduce it). Any other suggestions what might be going on here?

cdown

comment created time in a month

push eventcdown/gmute

Chris Down

commit sha 1bd66287bcbab3334d19cbc5a1e81aa00a08cca1

Defensively use errors="ignore" in header parsing Not seen in the wild, just proactive. We shouldn't need to parse any headers containing any non-ascii anyway.

view details

push time in a month

pull request commentsystemd/systemd

service: Check for existing racy SIGCHLD for non-aliens

arm64 failure is transient.

cdown

comment created time in a month

pull request commentsystemd/systemd

service: Check for existing racy SIGCHLD for non-aliens

This is pretty old code, so I'm surprised, and feel I must be missing something here. However, it does fix the issue, and tracing through the code, I don't see any existing place we try to mitigate this. Historical context and thoughts appreciated :-)

cdown

comment created time in a month

PR opened systemd/systemd

service: Check for existing racy SIGCHLD for non-aliens cgroups

Consider the following situation:

  1. There is a large, multi-process service, x (in this case with KillMode=mixed).

  2. The user initiates systemctl stop x. The main process dies first, but all other processes are still running.

  3. We have now received SIGCHLD for the main process, but since the cgroup isn't empty, we don't do anything yet.

  4. All the other processes exist long enough that we go into final-sigkill.

  5. The processes terminate and we get SIGCHLD for them, but none of them are our main pid, so we don't mark the unit as dead.

  6. The cgroup is now empty, so we fire service_notify_cgroup_empty_event.

  7. Inside service_notify_cgroup_empty_event, we check main_pid_good().

  8. In main_pid_good(), we declare it "good" because we're ostensibly waiting for a SIGCHLD from the main pid. However, the SIGCHLD for the main pid has already come and gone, and we're never going to get it again.

  9. The child now exists permanently in this state, and cannot be budged (all new state changes just go on the queue, and are never actioned):

    systemctl status x.service

    • x.service Loaded: loaded (x.service; enabled; vendor preset: enabled) Active: deactivating (final-sigkill) since Wed 2020-09-09 07:29:30 PDT; 41min ago Main PID: 969981 (code=exited, status=0/SUCCESS) IO: 0B read, 44.6M written Tasks: 0 Memory: 2.2M CPU: 1min 37.506s CGroup: /foo.slice/x.service

    The cgroup in question is already empty, and the main pid is dead:

    wc -l /sys/fs/cgroup/foo.slice/x.service/cgroup.procs

    0

    ls /proc/969981

    ls: cannot access '/proc/969981': No such file or directory

Once we've received a SIGCHLD, we record the exit timestamp in the main pid's ExecStatus attached to the service, so we can use that to check for an already-received SIGCHLD from the main pid in this case. This results in machines which would previously end up with units wedged in the aforementioned state now not getting stuck any more.

+3 -2

0 comment

1 changed file

pr created time in a month

push eventcdown/systemd

Chris Down

commit sha d5e1b9c694aae7beddbaea332d3df3e374b780b6

service: Check for existing racy SIGCHLD for non-aliens Consider the following situation: 1. There is a large, multi-process service, x (in this case with `KillMode=mixed`). 2. The user initiates `systemctl stop x`. The main process dies first, but all other processes are still running. 3. We have now received SIGCHLD for the main process, but since the cgroup isn't empty, we don't do anything yet. 4. All the other processes exist long enough that we go into final-sigkill. 5. The processes terminate and we get SIGCHLD for them, but none of them are our main pid, so we don't mark the unit as dead. 6. The cgroup is now empty, so we fire service_notify_cgroup_empty_event. 7. Inside service_notify_cgroup_empty_event, we check main_pid_good(). 8. In main_pid_good(), we declare it "good" because we're ostensibly waiting for a SIGCHLD from the main pid. However, the SIGCHLD for the main pid has already come and gone, and we're never going to get it again. 9. The child now exists permanently in this state, and cannot be budged (all new state changes just go on the queue, and are never actioned): # systemctl status x.service * x.service Loaded: loaded (x.service; enabled; vendor preset: enabled) Active: deactivating (final-sigkill) since Wed 2020-09-09 07:29:30 PDT; 41min ago Main PID: 969981 (code=exited, status=0/SUCCESS) IO: 0B read, 44.6M written Tasks: 0 Memory: 2.2M CPU: 1min 37.506s CGroup: /foo.slice/x.service The cgroup in question is already empty, and the main pid is dead: # wc -l /sys/fs/cgroup/foo.slice/x.service/cgroup.procs 0 # ls /proc/969981 ls: cannot access '/proc/969981': No such file or directory Once we've received a SIGCHLD, we record the exit timestamp in the main pid's ExecStatus attached to the service, so we can use that to check for an already-received SIGCHLD from the main pid in this case. This results in machines which would previously end up with units wedged in the aforementioned state now not getting stuck any more.

view details

push time in a month

push eventcdown/systemd

Chris Down

commit sha bedc75cc3d3970b1912c7adfede29bbf4e607e1a

service: Check for existing racy SIGCHLD for non-aliens Consider the following situation: 1. There is a large, multi-process service, x (in this case with `KillMode=mixed`). 2. The user initiates `systemctl stop x`. The main process dies first, but all other processes are still running. 3. We have now received SIGCHLD for the main process, but since the cgroup isn't empty, we don't do anything yet. 4. All the other processes exist long enough that we go into final-sigkill. 5. The processes terminate and we get SIGCHLD for them, but none of them are our main pid, so we don't mark the unit as dead. 6. The cgroup is now empty, so we fire service_notify_cgroup_empty_event. 7. Inside service_notify_cgroup_empty_event, we check main_pid_good(). 8. In main_pid_good(), we declare it "good" because we're ostensibly waiting for a SIGCHLD from the main pid. However, the SIGCHLD for the main pid has already come and gone, and we're never going to get it again. 9. The child now exists permanently in this state, and cannot be budged (all new state changes just go on the queue, and are never actioned): # systemctl status x.service * x.service Loaded: loaded (x.service; enabled; vendor preset: enabled) Active: deactivating (final-sigkill) since Wed 2020-09-09 07:29:30 PDT; 41min ago Main PID: 969981 (code=exited, status=0/SUCCESS) IO: 0B read, 44.6M written Tasks: 0 Memory: 2.2M CPU: 1min 37.506s CGroup: /foo.slice/x.service The cgroup in question is already empty, and the main pid is dead: # wc -l /sys/fs/cgroup/foo.slice/x.service/cgroup.procs 0 # ls /proc/969981 ls: cannot access '/proc/969981': No such file or directory Once we've received a SIGCHLD, we record the exit timestamp in the main pid's ExecStatus attached to the service, so we can use that to check for an already-received SIGCHLD from the main pid in this case. This results in machines which would previously end up with units wedged in the aforementioned state now not getting stuck any more.

view details

push time in a month

push eventcdown/systemd

Chris Down

commit sha 51039009c71de519649522ab707e32ce6ab2c3dd

service: Check for existing racy SIGCHLD for non-aliens Consider the following situation: 1. There is a large, multi-process service, x, with `KillMode=mixed`. 2. The user initiates `systemctl stop x`. The main process dies first, but all other processes are still running. 3. We have now received SIGCHLD for the main process, but since the cgroup isn't empty, we don't do anything yet. 4. All the other processes exist long enough that we go into final-sigkill. 5. The processes terminate and we get SIGCHLD for them, but none of them are our main pid, so we don't mark the unit as dead. 6. The cgroup is now empty, so we fire service_notify_cgroup_empty_event. 7. Inside service_notify_cgroup_empty_event, we check main_pid_good(). 8. In main_pid_good(), we declare it "good" because we're waiting for a SIGCHLD. However, the SIGCHLD for the main pid has already come and gone, and we're never going to get it again. 9. The child now exists permanently in this state, and cannot be budged (all new state changes just go on the queue, and are never actioned): # systemctl status x.service * x.service Loaded: loaded (x.service; enabled; vendor preset: enabled) Active: deactivating (final-sigkill) since Wed 2020-09-09 07:29:30 PDT; 41min ago Main PID: 969981 (code=exited, status=0/SUCCESS) IO: 0B read, 44.6M written Tasks: 0 Memory: 2.2M CPU: 1min 37.506s CGroup: /foo.slice/x.service The cgroup in question is already empty, and the main pid is dead: # wc -l /sys/fs/cgroup/foo.slice/x.service/cgroup.procs 0 # ls /proc/969981 ls: cannot access '/proc/969981': No such file or directory Once we've received a SIGCHLD, we record the exit timestamp in the main pid's ExecStatus attached to the service, so we can use that to check for an already-received SIGCHLD from the main pid in this case. This results in machines which would previously end up with units wedged in the aforementioned state now not getting stuck any more.

view details

push time in a month

push eventcdown/systemd

Chris Down

commit sha 72a01000cadc49f63062834b670c2db624669abf

service: Check for existing SIGCHLD for non-aliens Consider the following situation: 1. There is a large, multi-process service, x, with `KillMode=mixed`. 2. The user initiates `systemctl stop x`. The main process dies first, but all other processes are still running. 3. We have now received SIGCHLD for the main process, but since the cgroup isn't empty, we don't do anything yet. 4. All the other processes exist long enough that we go into final-sigkill. 5. The processes terminate and we get SIGCHLD for them, but none of them are our main pid, so we don't mark the unit as dead. 6. The cgroup is now empty, so we fire service_notify_cgroup_empty_event. 7. Inside service_notify_cgroup_empty_event, we check main_pid_good(). 8. In main_pid_good(), we declare it "good" because we're waiting for a SIGCHLD. However, the SIGCHLD for the main pid has already come and gone, and we're never going to get it again. 9. The child now exists permanently in this state, and cannot be budged (all new state changes just go on the queue, and are never actioned): # systemctl status x.service * x.service Loaded: loaded (x.service; enabled; vendor preset: enabled) Active: deactivating (final-sigkill) since Wed 2020-09-09 07:29:30 PDT; 41min ago Main PID: 969981 (code=exited, status=0/SUCCESS) IO: 0B read, 44.6M written Tasks: 0 Memory: 2.2M CPU: 1min 37.506s CGroup: /foo.slice/x.service Once we've received a SIGCHLD, we record the exit timestamp in the main pid's ExecStatus attached to the service, so we can use that to check for an already-received SIGCHLD from the main pid in this case. This results in machines which would previously end up with units wedged in the aforementioned state now not getting stuck any more.

view details

push time in a month

push eventcdown/systemd

Lennart Poettering

commit sha dd480f7835eaebc809ddc74b343be3bb58d93cd1

copy: optionally, reproduce hardlinks from source in destination This is useful for duplicating trees that contain hardlinks: we keep track of potential hardlinks and try to reproduce them within the destination tree. (We do not hardlink between source and destination!). This is useful for trees like ostree images which heavily use hardlinks and which are otherwise exploded into separate copies of all files when we duplicate the trees.

view details

Lennart Poettering

commit sha 652d90407a1ddad890b03cf273420e70c1ae2748

tree-wide: copy hardlinks wherever we deal with possibly large OS-style trees Fixes: #7382

view details

Zbigniew Jędrzejewski-Szmek

commit sha e4bed40f40e32906203ef8886f0435524bd0ebb3

resolve: move handler functions higher No functional change, preparation for subsequent refactoring.

view details

Zbigniew Jędrzejewski-Szmek

commit sha b5febb3f56d17767e5e46e1fd610df2e762dc384

resolved: unify the two functions to create extra stubs There is a minor functional change: IPV6_FREEBIND is set of IPv6 sockets, not IP_FREEBIND. This was missed in af8b1384, but I noticed only after the merging the two functions. And a not-so-minor functional chagnge: 7216a3b5dcde36245 changed manager_dns_stub_tcp_fd_extra() to return the fd even if the source was already initialized, but it didn't do the same change for manager_dns_stub_udp_fd_extra(), so it would return 0 in that case. But 0354029bf572489b uses manager_dns_stub_udp_fd_extra() when preparing to call manager_send(), and will pass 0 as the fd in that case. For both socket types fd is now always returned.

view details

Zbigniew Jędrzejewski-Szmek

commit sha d491917c9fa816964c0c4f57b8499e8e51776241

resolved: unify the two functions to create main stubs There is a small functional difference: IP_TTL==1 is now also set for the UDP socket. I assume that it wasn't set by mistake.

view details

Zbigniew Jędrzejewski-Szmek

commit sha 38c30b35f38298c2fbdcee46bb39aed3baa3019c

test-in-addr-util: add log headers

view details

Zbigniew Jędrzejewski-Szmek

commit sha 610618ff61a87ae652116d2e0b58fa556b3c66ba

test-socket-netlink: print the proper expected string We would use the return value from the tested function to decide what to print as "expected", which is confusing when something is wrong with the tested function.

view details

Zbigniew Jędrzejewski-Szmek

commit sha 25b2d602b91a5b9225e3f7c72d77e51face237ad

shared/socket-netlink: only allow ifindex if explicitly supported Instead of ignoring ifindex if not wanted, refuse it is the caller does not allow it.

view details

Zbigniew Jędrzejewski-Szmek

commit sha 2313524aa0082b84ae96083cd616120f60a67faa

basic: convert ifname_valid_full() to take flags and allow numeric interfaces

view details

Zbigniew Jędrzejewski-Szmek

commit sha b16d17a68ae8b44111b08c2689b3dee1d1f90169

basic: show interface scope in sockaddr_pretty() If the interface scope is specified, this changes the meaning of the address quite significantly. Let's show the IPv6 scope_id if present. Sadly we don't even have a test for sockaddr_pretty() output :( This will be implicitly tested through socket_address_parse() later on.

view details

Zbigniew Jędrzejewski-Szmek

commit sha c1f848d73c076527b617c132d7dd3cdb1699e2b8

shared: check interface name validity in in_addr_port_ifindex_name_from_string_auto() We don't try to resolve invalid ifnames as all. A different return code is used. This difference will be verified later in test_socket_address_parse() when socket_address_parse() is converted to use in_addr_port_ifindex_name_from_string_auto().

view details

Zbigniew Jędrzejewski-Szmek

commit sha 222eaaf937d3d39beaea1878e04f20b1689834ec

Get rid of in_addr_port_from_string_auto() again With the commit "shared/socket-netlink: only allow ifindex if explicitly supported" this helper is not necessary anymore.

view details

Zbigniew Jędrzejewski-Szmek

commit sha 75af1666d7476ee77f47bcc2e6c415c040326eb9

shared: make socket_address_parse use the generic parser for IPv[46] addresses One special syntax is not supported anymore: "iface:port" would be parsed as an interface name plus numerical port, equivalent to "[::]%iface:port". This was added in 542563babda, but was undocumented, and we had no tests for it. It seems that this actually wasn't doing anything useful, because the kernel only uses the scope identifier for link-local addresses.

view details

Zbigniew Jędrzejewski-Szmek

commit sha 44ab234734907dbf08fae80a57dae01d9f0b2d0f

shared: don't unconditionally set SOCK_STREAM as type in socket_address_parse() We would set .type to a fake value. All real callers (outside of tests) immediately overwrite .type with a proper value after calling socket_address_parse(). So let's not set it and adjust the few places that relied on it being set to the fake value. socket_address_parse() is modernized to only set the output argument on success.

view details

Zbigniew Jędrzejewski-Szmek

commit sha c4c6ee3a959f0f082f232790677709e01b862fa9

resolved: drop duplicated check The same conditional appears a few lines down.

view details

Zbigniew Jędrzejewski-Szmek

commit sha a07ab56a4975f1159fd466530f150bfd2230f83c

Allow interface scopes to be specified in ListenStream= Closes #12624. The formatting in systemd.socket.xml is updated a bit. Currently in_addr_port_ifindex_name_to_string() always prints the ifindex numerically. This is not super useful since the interface numbers are semi-random. Should we use interface names in preference?

view details

Zbigniew Jędrzejewski-Szmek

commit sha a73569f180dbb8690ae3b350b0609ac0f9705c55

shared/socket-netlink: set output in socket_address_parse_netlink() only on success

view details

Zbigniew Jędrzejewski-Szmek

commit sha 08224f38acdf5e391dda43e4e004e4ddc5c00302

Use sockaddr_un_set_path() in socket_address_parse() Two functional changes: - "/" is now refused. The test is adjusted. - The trailing NUL is *not* included in the returned size for abstract size. The comments in sockaddr_un_set_path() indicate that this is the right thing to do, and the code in socket_address_parse() wasn't doing that.

view details

Zbigniew Jędrzejewski-Szmek

commit sha c097bf1f50af525fd5cfb0ae7ee9d62fbcb1ca58

Minor simplification in sockaddr_un_set_path()

view details

Yu Watanabe

commit sha c799c93c620e794f83a78ca1f02b5263305c812f

udev: fix indentation Follow-up for 90e30d767a32dc93c9ee94ad8b8d665eecf79e96.

view details

push time in a month

created tagcdown/gmute

tag1.4.0

Gmail mute support for mutt and other email clients

created time in a month

push eventcdown/gmute

Chris Down

commit sha 71d81e03f31ba3bac717d8fe6cd5095e04820ddb

Bump to 1.4.0

view details

push time in a month

push eventcdown/gmute

Chris Down

commit sha 8ff05bf1800735f2f80a6349c8a1bcd322fe5053

Handle header parsing even if sys.stdin's encoding doesn't match

view details

push time in a month

push eventcdown/systemd

Chris Down

commit sha 45320b4ae8aef3c7ff8baa038cb1a765f776517f

service: Don't wait for SIGCHLD even if main pid is not alien Consider the following situation: 1. There is a large, multi-process service, x, with `KillMode=mixed`. 2. The user initiates `systemctl stop x`. The main process dies first, but all other processes are still running. 3. We receive SIGCHLD for the main process, but since the cgroup isn't empty, we don't do anything yet. 4. All the other processes take too long, so we go into final-sigkill. 5. The processes terminate and we get SIGCHLD, but none of them are our main pid, so we don't mark the unit as dead. 6. The cgroup is now empty, so we fire service_notify_cgroup_empty_event. 7. Inside service_notify_cgroup_empty_event, we check main_pid_good(). 8. In main_pid_good(), we declare it "good" because we're waiting for a SIGCHLD, but the SIGCHLD for the main pid has already come and gone, and we're never going to get it again. 9. The child now exists permanently in this state, and cannot be budged: # systemctl status x.service * x.service Loaded: loaded (/one_world/units/x.service; enabled; vendor preset: enabled) Active: deactivating (final-sigkill) since Wed 2020-09-09 07:29:30 PDT; 41min ago Main PID: 969981 (code=exited, status=0/SUCCESS) IO: 0B read, 44.6M written Tasks: 0 Memory: 2.2M CPU: 1min 37.506s CGroup: /foo.slice/x.service This change makes it so that we also check for a historic SIGCHLD from the main pid.

view details

push time in a month

push eventcdown/systemd

Chris Down

commit sha aaeeddb5368f2da9c8ebc8e6c271fd7ac86eab53

service: Don't wait for SIGCHLD even if main pid is not alien Consider the following situation: 1. There is a large, multi-process service, x, with `KillMode=mixed`. 2. The user initiates `systemctl stop x`. The main process dies first, but all other processes are still running. 3. We receive SIGCHLD for the main process, but since the cgroup isn't empty, we don't do anything yet. 4. All the other processes take too long, so we go into final-sigkill. 5. The processes terminate and we get SIGCHLD, but none of them are our main pid, so we don't mark the unit as dead. 6. The cgroup is now empty, so we fire service_notify_cgroup_empty_event. 7. Inside service_notify_cgroup_empty_event, we check main_pid_good(). 8. In main_pid_good(), we declare it "good" because we're waiting for a SIGCHLD, but the SIGCHLD for the main pid has already come and gone, and we're never going to get it again. 9. The child now exists permanently in this state, and cannot be budged: # systemctl status x.service * x.service Loaded: loaded (/one_world/units/x.service; enabled; vendor preset: enabled) Active: deactivating (final-sigkill) since Wed 2020-09-09 07:29:30 PDT; 41min ago Main PID: 969981 (code=exited, status=0/SUCCESS) IO: 0B read, 44.6M written Tasks: 0 Memory: 2.2M CPU: 1min 37.506s CGroup: /foo.slice/x.service This change makes it so that we also check for a historic SIGCHLD from the main pid.

view details

push time in a month

push eventcdown/systemd

Zbigniew Jędrzejewski-Szmek

commit sha 0176728a732ab025211d99486e3863f7a39df0bf

test-string-util,test-extract-word: add log headers

view details

Zbigniew Jędrzejewski-Szmek

commit sha 53cd7f337489433734c0d134b2a569727dd61a38

basic: add string_contains_word() This wraps the common pattern of using extract_first_word() in a loop to look for a matching word.

view details

Zbigniew Jędrzejewski-Szmek

commit sha 81823e6c12771721e9a729f6280a9de26fd70bad

sd-login: use string_contains_word()

view details

Zbigniew Jędrzejewski-Szmek

commit sha 46bf625aca8aa6f1f8608611dccddce948ded4d6

Add string_contains_word_strv() I had to move STRV_MAKE to macro.h. There is a circular dependency between extract-word.h, strv.h, and string-util.h that makes it hard to define the inline function otherwise.

view details

Zbigniew Jędrzejewski-Szmek

commit sha 434fef6de399ea7b95077572258def799acf02ce

shared/sleep-config: more logging and port to extract_first_word()

view details

Yu Watanabe

commit sha 3b4e123173ba1e4cb6af504d98e0c018d9ccfc8a

udev: make log_rule_error() or friends return void

view details

Yu Watanabe

commit sha a718b951ac2c2186db22311b611b7e7ccdc30915

udev: return negative errno for invalid EVDEV_ABS_XXX= property

view details

Yu Watanabe

commit sha 09c69ecaeb2c63b2b7e20728c4f4704bbb464a9c

udev: explicitly specify return value

view details

Yu Watanabe

commit sha ab54f12b783eea891d6414fbc14cd6fe7cbe4c80

sd-device: make log_device_error() or friends return void

view details

Yu Watanabe

commit sha 38104ee2a545a0e06fc261c0161aed322285f363

udev: do not discard const qualifier

view details

Yu Watanabe

commit sha 93c5b904597ee86cbf65d8b5dc9d68428f2a2130

core/slice: explicitly specify return value

view details

Yu Watanabe

commit sha 8ed6f81ba3b7be55d20a5d703c9aa7d4018b80ed

core: make log_unit_error() or friends return void

view details

Yu Watanabe

commit sha d157714b6819d9e4faa93ef64a5041d5a8ae4779

network: make log_link_error() or friends return void

view details

Lennart Poettering

commit sha 36aaabc35e524184a896e1505997b6a3b526b889

resolve: DNSStubListenerExtra → DnsStubListenerExtra All our other struct types use the "Dns" spelling, rather than "DNS". Do the same for this struct.

view details

Lennart Poettering

commit sha ae8f0ec323f3cc1b75e2d25d4832fd9bc232261b

resolved: move dns stub definitions to resolved-dns-stub.[ch] Just some moving around, no logic changes.

view details

Lennart Poettering

commit sha 0354029bf572489bf968a39c537ec0cbdef828ce

resolved: don't store udp/tcp fd in DnsPacket object DnsPacket should better be a "dead" object, i.e. list facts, not track resources. By including an fd in its fields it started tracking resources however, without actually taking a ref to the fd (i.e. no dup() or so was called on it). Let's hence rework things so that we don#t have to keep track of the fd a packet came in from. Instead, pass around the DnsStubListenerExtra object wherever we need to. This should be useful as soon as we start caching whole DnsPacket objects to allow replying to DNSSEC/CO packets, i.e. where we have to keep a copy of the original DnsPacket around for a long time in cache, potentially much longer than the fds the packet was received on.

view details

Yu Watanabe

commit sha 8c63924c8d1eeb5a173669b8b06230bfe721f139

network: ignore error on increasing netlink receive buffer size

view details

Yu Watanabe

commit sha 1263c85ef32ea35969748cd4304cd1a51d19e8d1

util: refuse to set too large value for socket buffer size

view details

Yu Watanabe

commit sha b92f350789e33942be0cf85af22a580c1fd483d6

util: try to set with SO_{RCV,SND}BUFFORCE when requested size is larger than the kernel limit The commit 10ce2e0681ac16e7bb3619b7bb1a72a6f98a2f2c inverts the order of SO_{RCV,SND}BUFFORCE and SO_{RCV,SND}BUF. However, setting buffer size with SO_{RCV,SND}BUF does not fail even if the requested size is larger than the kernel limit. Hence, SO_{RCV,SND}BUFFORCE will not use anymore and the buffer size is always limited by the kernel limit even if we have the priviledge to ignore the limit. This makes the buffer size is checked after configuring it with SO_{RCV,SND}BUF, and if it is still not sufficient, then try to set it with FORCE command. With this commit, if we have enough priviledge, the requested buffer size is correctly set. Hopefully fixes #14417.

view details

Yu Watanabe

commit sha d9d9b2a0ae2befb645ef3aa420831423bcb9f58f

util: introduce fd_set_{snd,rcv}buf()

view details

push time in a month

push eventcdown/pkgbuilds

Chris Down

commit sha 479c33b499e6fc7267636ceba75327251ffcc27b

upgpkg: perl-build 1.31-1 upstream release

view details

push time in a month

push eventcdown/systemd

Chris Down

commit sha 843fe860b720af99461bbb86b3dfe1be91631ef0

service: Don't wait for SIGCHLD even if main pid is not alien Consider the following situation: 1. There is a large, multi-process service, x, with `KillMode=mixed`. 2. The user initiates `systemctl stop x`. The main process dies first, but all other processes are still running. 3. We receive SIGCHLD for the main process, but since the cgroup isn't empty, we don't do anything yet. 4. All the other processes take too long, so we go into final-sigkill. 5. The processes terminate and we get SIGCHLD, but none of them are our main pid, so we don't mark the unit as dead. 6. The cgroup is now empty, so we fire service_notify_cgroup_empty_event. 7. Inside service_notify_cgroup_empty_event, we check main_pid_good(). 8. In main_pid_good(), we declare it "good" because we're waiting for a SIGCHLD, but the SIGCHLD for the main pid has already come and gone, and we're never going to get it again. 9. The child now exists permanently in this state, and cannot be budged: # systemctl status x.service * x.service Loaded: loaded (/one_world/units/x.service; enabled; vendor preset: enabled) Active: deactivating (final-sigkill) since Wed 2020-09-09 07:29:30 PDT; 41min ago Main PID: 969981 (code=exited, status=0/SUCCESS) IO: 0B read, 44.6M written Tasks: 0 Memory: 2.2M CPU: 1min 37.506s CGroup: /foo.slice/x.service This change makes it so that we also check for a historic SIGCHLD from the main pid.

view details

push time in a month

create barnchcdown/systemd

branch : cdown/sigchld_gone/2020-09-09

created branch time in a month

push eventcdown/actools

Chris Down

commit sha be5ac7ad06adb3b680cc8fde0e10831b35d6f207

generate_entry_list: Be smarter in avoiding assigned skins The previous LAST_SKIN_INDEX approach doesn't avoid explicitly assigned skins. Replace it with a more robust approach which does two passes through the racer list, and will avoid duplication in all cases where it is possible to do so.

view details

push time in a month

push eventcdown/actools

Chris Down

commit sha f979580c49f0fa9fb19ebe0f709cb2e870e527fa

generate_entry_list: Be smarter in avoiding assigned skins The previous LAST_SKIN_INDEX approach doesn't avoid explicitly assigned skins. Replace it with a more robust approach which does two passes through the racer list, and will avoid duplication in all cases where it is possible to do so.

view details

push time in a month

push eventcdown/actools

Chris Down

commit sha f570a94e205ec52e5b61a0a361ce94fbf192f873

generate_entry_list: Black format

view details

Chris Down

commit sha 15dbd17d2a00296d779d2c3144dd29ea284f4402

generate_entry_list: Don't mark SCG as less popular This definitely picked up in popularity.

view details

Chris Down

commit sha 9e1f388faec8ba581ac05ed3b1a6cceb7edff36e

generate_entry_list: Be smarter in avoiding assigned skins The previous LAST_SKIN_INDEX approach doesn't avoid explicitly assigned skins. Replace it with a more robust approach which does two passes through the racer list, and will avoid duplication in all cases where it is possible to do so.

view details

push time in a month

push eventcdown/dotfiles

Chris Down

commit sha 9d5cfc45144c9f9f57b0859f98dc55f15a37fe28

vim: Extend non-restoration of position to all git buffers

view details

push time in a month

more