Up to Main Index                             Up to Journal for March, 2021

                      JOURNAL FOR SUNDAY 7TH MARCH, 2021
______________________________________________________________________________

SUBJECT: Decision on next WolfMUD release delayed a week
   DATE: Sun  7 Mar 18:51:45 GMT 2021

This weekend I said I was going to give my verdict as to whether the new
client communication changes would be included in the next release of WolfMUD
or not. However, I had my first Coronavirus vaccine jab this week and I’ve
been feeling awful ever since. Needless to say, I’ve not been coding much this
week as a result :( I’m therefore going to put off making a decision until
next weekend — once I’ve had a chance to work on the code some more.

I did fix a data race in the new code. Due to a thumping headache and brains
full of cotton wool, It took me hours longer than it should have to find and
sort out.

Way back on the 28th April 2020 I made commit 48d9639 with the subject of
“attr: Don’t modify passed []byte in Player.Write”. It included this code:


  // force new slice allocation leaving the originally passed []byte
  // untouched, as per the io.Writer documention.
  n, err = p.Writer.Write(append(b[:len(b):len(b)], p.buildPrompt()...))


Apart from the spelling mistake in the comment, the code looks reasonable
enough. Until you realise that p.buildPrompt can return a zero length prompt.
If the prompt is of zero length then append will return the original slice.
In the case of the specific problem this fix was intended to solve that is
okay — the original slice remains unchanged.

It becomes a problem with the new communication code. Now the message is
placed on the backlog channel and written later to the client. This means that
when the same message is sent to multiple clients and the prompt is zero
length the same message may appear in multiple channels causing a data race.
Hours to reproduce, hours to debug and hours to test…

I’m also limited as to how many concurrent bots I can launch against the
WolfMUD server for testing. When the server has the race detector enabled it
very quickly consumes my 8Gb of RAM *sigh*.

In other news, I’m just waiting for an item to be restocked before ordering
the new fan and some other parts for my Raspberry Pi 4. I’m also going to add
a Raspberry Pi Pico to the order. I’ve worked with Arduino before and the Pico
looks like a nice board to have a play with. I don’t have a specific project
in mind, although it does look like TinyGo[1] may be adding support for the
Pico…

--
Diddymus

  [1] TinyGo — A Go compiler for small places: https://tinygo.org


  Up to Main Index                             Up to Journal for March, 2021