1687e558d3
There was some bug which could be worked around by double emitting an event. However that proofed to be brittle: We send the first message here from the worker goroutine: https://git.sr.ht/~sircmpwn/aerc/tree/a5553438/item/worker/maildir/worker.g= o#L306 Then Tick() is waked in the main goroutine and calls ProcessMessage: https://git.sr.ht/~sircmpwn/aerc/tree/a5553438/item/widgets/account.go#L100 ProcessMessage in the main goroutine reads types.Message state with msg.getId() and msg.InResponseTo(): https://git.sr.ht/~sircmpwn/aerc/tree/a5553438/item/worker/types/worker.go#= L74-76 Meanwhile in the worker goroutine we call PostMessage for a second time with a pointer that points to the *same* previous message that ProcessMessage is reading: https://git.sr.ht/~sircmpwn/aerc/tree/a5553438/item/worker/maildir/worker.g= o#L306 The second PostMessage call makes writes to message while ProcessMessage in the main goroutine is possibly reading: https://git.sr.ht/~sircmpwn/aerc/tree/a5553438/item/worker/types/worker.go#= L59 This led to a data race in the event loop Reported-By: Wagner Riffel <w@104d.net> |
||
---|---|---|
commands | ||
completer | ||
config | ||
contrib | ||
doc | ||
filters | ||
lib | ||
models | ||
templates | ||
widgets | ||
worker | ||
.build.yml | ||
.gitignore | ||
aerc.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
Makefile | ||
README.md |
aerc
aerc is an email client for your terminal.
A short demonstration can be found on https://aerc-mail.org/
Join the IRC channel: #aerc on irc.freenode.net for end-user support, and #aerc-dev for development.
Usage
On its first run, aerc will copy the default config files to ~/.config/aerc
on Linux or ~/Library/Preferences/aerc
on MacOS (or $XDG_CONFIG_HOME/aerc
if set)
and show the account configuration wizard.
If you redirect stdout to a file, logging output will be written to that file:
$ aerc > log
For instructions and documentation: see man aerc
and further specific man
pages on there.
Note that the example HTML filter (off by default), additionally needs w3m
and
dante
to be installed.
Installation
Binary Packages
Recent versions of aerc are available on:
And likely other platforms.
From Source
Install the dependencies:
- go (>=1.13)
- scdoc
Then compile aerc:
$ make
aerc optionally supports notmuch. To enable it, you need to have a recent version of notmuch, including the header files (notmuch.h). Then compile aerc with the necessary build tags:
$ GOFLAGS=-tags=notmuch make
To install aerc locally:
# make install
Resources
Send patches and questions to ~sircmpwn/aerc@lists.sr.ht
Instructions for preparing a patch are available at git-send-email.io
Subscribe to release announcements on ~sircmpwn/aerc-announce
Bugs & todo here: ~sircmpwn/aerc2