wtfutil / wtf

The personal information dashboard for your terminal
http://wtfutil.com
Mozilla Public License 2.0
15.85k stars 803 forks source link

Data races popping up and rendering breaks #315

Closed michaelMinar closed 5 years ago

michaelMinar commented 6 years ago

What's the problem?

Been running wtf dash for a few weeks now without issue. Today, after playing around with my config a bit, i noticed the dashboard just stops rendering properly. It will start up and render correctly for a short time ~10-15 seconds but then become gibberish. When I exit out, I see a message like:

"Found 24 data race(s)"

The number can vary from run to run, but typically around 20-30.

How did you expect it to behave?

Just like it has been. Start the dashboard and the rendering/drawing behaves like normal

Operating system

Mac OS

Terminal program & version

iterm2

WTF version

just pulled master today.

senorprogrammer commented 6 years ago

Thanks @michaelMinar, can you tell me which modules you have loaded?

michaelMinar commented 6 years ago

Hi @senorprogrammer. I actually just added the Twitter widget to my config today. Once the problems began, i set the enable flag to False but did not remove it. I'll try that now.

In addition, I've had the following widgets running for a few weeks without issue:

michaelMinar commented 6 years ago

quick update. Ripping out all the modules i had set to false did not change anything. Now my config is simply the

senorprogrammer commented 6 years ago

Confirmed, thanks for reporting this.

michaelMinar commented 6 years ago

of course. I've only been using this project for a short while, but it's fantastic! Thank you for the quick response.

On 14 September 2018 at 19:54, Chris Cummer notifications@github.com wrote:

Confirmed, thanks for reporting this.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/senorprogrammer/wtf/issues/315#issuecomment-421525634, or mute the thread https://github.com/notifications/unsubscribe-auth/AK_pU6o0YkQaQpp9M_Qa_iVeYpe0OoZnks5ubGvYgaJpZM4WqEBE .

anandsudhir commented 6 years ago

Interesting.. I don't have this issue on Ubuntu 16.4 or 18.04. Windows 10 seems fine too. Perhaps it is specific to MacOS/iterm2?

And..I stand corrected, I have the same issue on Ubuntu as well.

michaelMinar commented 6 years ago

Just following up with a little more color. Have tested on the native terminal for Mac OS, so taking iterm2 off the table. I have also reproduced the issue with only the clock widget in my config.

senorprogrammer commented 6 years ago

Race trace from a simple run:

==================
WARNING: DATA RACE
Write at 0x00c4201f8300 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetRect()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:116 +0x64
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:576 +0x2214
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c4201f8300 by goroutine 26:
  [failed to restore the stack]

Goroutine 26 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4201f8308 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetRect()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:117 +0x7e
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:576 +0x2214
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c4201f8308 by goroutine 26:
  [failed to restore the stack]

Goroutine 26 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4201f8310 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetRect()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:118 +0x99
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:576 +0x2214
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c4201f8310 by goroutine 26:
  [failed to restore the stack]

Goroutine 26 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4201f8318 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetRect()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:119 +0xb4
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:576 +0x2214
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c4201f8318 by goroutine 26:
  [failed to restore the stack]

Goroutine 26 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4201f8378 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Box).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:279 +0x841
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:708 +0xec
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:582 +0x2d8d
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous write at 0x00c4201f8378 by goroutine 26:
  [failed to restore the stack]

Goroutine 26 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4201f8320 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Box).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:294 +0xd02
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:708 +0xec
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:582 +0x2d8d
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c4201f8320 by goroutine 26:
  [failed to restore the stack]

Goroutine 26 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420349b00 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetRect()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:116 +0x64
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:576 +0x2214
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c420349b00 by goroutine 23:
  github.com/senorprogrammer/wtf/todo.(*Widget).formattedItemLine()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:92 +0x702
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/display.go:27 +0x55b
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420349b08 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetRect()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:117 +0x7e
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:576 +0x2214
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c420349b08 by goroutine 23:
  github.com/senorprogrammer/wtf/todo.(*Widget).formattedItemLine()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:92 +0x6be
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/display.go:27 +0x55b
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420349b10 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetRect()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:118 +0x99
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:576 +0x2214
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c420349b10 by goroutine 23:
  github.com/senorprogrammer/wtf/todo.(*Widget).formattedItemLine()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:92 +0x6d3
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/display.go:27 +0x55b
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420349b18 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetRect()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:119 +0xb4
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:576 +0x2214
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous read at 0x00c420349b18 by goroutine 23:
  github.com/senorprogrammer/wtf/todo.(*Widget).formattedItemLine()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:92 +0x6f1
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/display.go:27 +0x55b
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c420349b78 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Box).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:279 +0x841
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:708 +0xec
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:582 +0x2d8d
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous write at 0x00c420349b78 by goroutine 23:
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:210 +0xfa
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c420410c70 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).reindexBuffer()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:513 +0x6a
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:721 +0x290
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:582 +0x2d8d
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous write at 0x00c420410c70 by goroutine 23:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Highlight()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:343 +0x12a
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/display.go:36 +0xa50
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c420410ca8 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).reindexBuffer()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:652 +0x10a8
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:721 +0x290
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:582 +0x2d8d
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous write at 0x00c420410ca8 by goroutine 23:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Highlight()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:336 +0x53
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/display.go:36 +0xa50
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202e0360 by main goroutine:
  runtime.mapaccess2_faststr()
      /usr/local/Cellar/go/1.10.3/libexec/src/runtime/hashmap_fast.go:261 +0x0
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).reindexBuffer()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:652 +0x10e3
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:721 +0x290
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:582 +0x2d8d
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous write at 0x00c4202e0360 by goroutine 23:
  runtime.mapassign_faststr()
      /usr/local/Cellar/go/1.10.3/libexec/src/runtime/hashmap_fast.go:694 +0x0
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Highlight()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:341 +0x107
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/display.go:36 +0xa50
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c420410cea by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:729 +0x2006
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:582 +0x2d8d
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous write at 0x00c420410cea by goroutine 23:
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:368 +0xb3d
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420410cc8 by main goroutine:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:753 +0x1fe2
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Grid).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/grid.go:582 +0x2d8d
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Pages).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/pages.go:246 +0x190
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Draw()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:259 +0x160
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*Application).Run()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/application.go:102 +0x179
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:305 +0x5f5

Previous write at 0x00c420410cc8 by goroutine 23:
  github.com/senorprogrammer/wtf/todo.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:369 +0xb5c
  github.com/senorprogrammer/wtf/todo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/todo/widget.go:74 +0x63
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Goroutine 23 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420410f80 by goroutine 26:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:321 +0x59
  github.com/senorprogrammer/wtf/textfile.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/textfile/widget.go:85 +0x40c
  github.com/senorprogrammer/wtf/textfile.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/textfile/widget.go:68 +0x38
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous read at 0x00c420410f80 by main goroutine:
  [failed to restore the stack]

Goroutine 26 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420410fb0 by goroutine 26:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:323 +0xc7
  github.com/senorprogrammer/wtf/textfile.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/textfile/widget.go:85 +0x40c
  github.com/senorprogrammer/wtf/textfile.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/textfile/widget.go:68 +0x38
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c420410fb0 by main goroutine:
  [failed to restore the stack]

Goroutine 26 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4201f85b8 by goroutine 27:
  github.com/senorprogrammer/wtf/git.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:210 +0x25c
  github.com/senorprogrammer/wtf/git.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/widget.go:86 +0x188
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous read at 0x00c4201f85b8 by main goroutine:
  [failed to restore the stack]

Goroutine 27 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4201f8560 by goroutine 27:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:98 +0x7a
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/git.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/display.go:21 +0x2f2
  github.com/senorprogrammer/wtf/git.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/widget.go:86 +0x188
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4201f8560 by main goroutine:
  [failed to restore the stack]

Goroutine 27 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4201f8568 by goroutine 27:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0x99
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/git.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/display.go:21 +0x2f2
  github.com/senorprogrammer/wtf/git.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/widget.go:86 +0x188
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4201f8568 by main goroutine:
  [failed to restore the stack]

Goroutine 27 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4201f8570 by goroutine 27:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0xab
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/git.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/display.go:21 +0x2f2
  github.com/senorprogrammer/wtf/git.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/widget.go:86 +0x188
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4201f8570 by main goroutine:
  [failed to restore the stack]

Goroutine 27 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4201f8578 by goroutine 27:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0xc6
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/git.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/display.go:21 +0x2f2
  github.com/senorprogrammer/wtf/git.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/widget.go:86 +0x188
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4201f8578 by main goroutine:
  [failed to restore the stack]

Goroutine 27 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420411050 by goroutine 27:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:321 +0x59
  github.com/senorprogrammer/wtf/git.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/display.go:29 +0x624
  github.com/senorprogrammer/wtf/git.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/widget.go:86 +0x188
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous read at 0x00c420411050 by main goroutine:
  [failed to restore the stack]

Goroutine 27 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420411080 by goroutine 27:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:323 +0xc7
  github.com/senorprogrammer/wtf/git.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/display.go:29 +0x624
  github.com/senorprogrammer/wtf/git.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/git/widget.go:86 +0x188
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c420411080 by main goroutine:
  [failed to restore the stack]

Goroutine 27 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4202be738 by goroutine 32:
  github.com/senorprogrammer/wtf/twitter.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:210 +0x31f
  github.com/senorprogrammer/wtf/twitter.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:62 +0x4f
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous read at 0x00c4202be738 by main goroutine:
  [failed to restore the stack]

Goroutine 32 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202be6e0 by goroutine 32:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:98 +0x7a
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/twitter.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:79 +0x3ca
  github.com/senorprogrammer/wtf/twitter.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:62 +0x4f
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4202be6e0 by main goroutine:
  [failed to restore the stack]

Goroutine 32 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202be6e8 by goroutine 32:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0x99
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/twitter.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:79 +0x3ca
  github.com/senorprogrammer/wtf/twitter.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:62 +0x4f
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4202be6e8 by main goroutine:
  [failed to restore the stack]

Goroutine 32 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202be6f0 by goroutine 32:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0xab
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/twitter.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:79 +0x3ca
  github.com/senorprogrammer/wtf/twitter.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:62 +0x4f
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4202be6f0 by main goroutine:
  [failed to restore the stack]

Goroutine 32 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202be6f8 by goroutine 32:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0xc6
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/twitter.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:79 +0x3ca
  github.com/senorprogrammer/wtf/twitter.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:62 +0x4f
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4202be6f8 by main goroutine:
  [failed to restore the stack]

Goroutine 32 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4205c60e0 by goroutine 32:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:321 +0x59
  github.com/senorprogrammer/wtf/twitter.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:84 +0x579
  github.com/senorprogrammer/wtf/twitter.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:62 +0x4f
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous read at 0x00c4205c60e0 by main goroutine:
  [failed to restore the stack]

Goroutine 32 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4205c6110 by goroutine 32:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:323 +0xc7
  github.com/senorprogrammer/wtf/twitter.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:84 +0x579
  github.com/senorprogrammer/wtf/twitter.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/twitter/widget.go:62 +0x4f
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4205c6110 by main goroutine:
  [failed to restore the stack]

Goroutine 32 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420410eb0 by goroutine 25:
  github.com/senorprogrammer/wtf/ipaddresses/ipinfo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:321 +0x83
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous read at 0x00c420410eb0 by main goroutine:
  [failed to restore the stack]

Goroutine 25 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420410ee0 by goroutine 25:
  github.com/senorprogrammer/wtf/ipaddresses/ipinfo.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:323 +0xeb
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c420410ee0 by main goroutine:
  [failed to restore the stack]

Goroutine 25 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4202be2b8 by goroutine 30:
  github.com/senorprogrammer/wtf/github.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:210 +0x26d
  github.com/senorprogrammer/wtf/github.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/widget.go:53 +0xc5
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous read at 0x00c4202be2b8 by main goroutine:
  [failed to restore the stack]

Goroutine 30 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202be260 by goroutine 30:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:98 +0x7a
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/github.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/display.go:19 +0x306
  github.com/senorprogrammer/wtf/github.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/widget.go:53 +0xc5
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4202be260 by main goroutine:
  [failed to restore the stack]

Goroutine 30 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202be268 by goroutine 30:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0x99
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/github.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/display.go:19 +0x306
  github.com/senorprogrammer/wtf/github.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/widget.go:53 +0xc5
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4202be268 by main goroutine:
  [failed to restore the stack]

Goroutine 30 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202be270 by goroutine 30:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0xab
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/github.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/display.go:19 +0x306
  github.com/senorprogrammer/wtf/github.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/widget.go:53 +0xc5
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4202be270 by main goroutine:
  [failed to restore the stack]

Goroutine 30 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Read at 0x00c4202be278 by goroutine 30:
  github.com/senorprogrammer/wtf/wtf.RightAlignFormat()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/box.go:99 +0xc6
  github.com/senorprogrammer/wtf/wtf.SigilStr()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/utils.go:149 +0x31d
  github.com/senorprogrammer/wtf/github.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/display.go:19 +0x306
  github.com/senorprogrammer/wtf/github.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/widget.go:53 +0xc5
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4202be278 by main goroutine:
  [failed to restore the stack]

Goroutine 30 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4205c6010 by goroutine 30:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:321 +0x59
  github.com/senorprogrammer/wtf/github.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/display.go:29 +0x678
  github.com/senorprogrammer/wtf/github.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/widget.go:53 +0xc5
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous read at 0x00c4205c6010 by main goroutine:
  [failed to restore the stack]

Goroutine 30 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c4205c6040 by goroutine 30:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:323 +0xc7
  github.com/senorprogrammer/wtf/github.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/display.go:29 +0x678
  github.com/senorprogrammer/wtf/github.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/github/widget.go:53 +0xc5
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:14 +0x59

Previous write at 0x00c4205c6040 by main goroutine:
  [failed to restore the stack]

Goroutine 30 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8
==================
==================
WARNING: DATA RACE
Write at 0x00c420411bb0 by goroutine 29:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:321 +0x59
  github.com/senorprogrammer/wtf/clocks.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/clocks/display.go:26 +0x3c5
  github.com/senorprogrammer/wtf/clocks.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/clocks/widget.go:30 +0x5a
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:29 +0xda

Previous read at 0x00c420411bb0 by goroutine 46:
  [failed to restore the stack]

Goroutine 29 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8

Goroutine 46 (running) created at:
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:302 +0x553
==================
==================
WARNING: DATA RACE
Write at 0x00c420411be0 by goroutine 29:
  github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview.(*TextView).SetText()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/vendor/github.com/rivo/tview/textview.go:323 +0xc7
  github.com/senorprogrammer/wtf/clocks.(*Widget).display()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/clocks/display.go:26 +0x3c5
  github.com/senorprogrammer/wtf/clocks.(*Widget).Refresh()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/clocks/widget.go:30 +0x5a
  github.com/senorprogrammer/wtf/wtf.Schedule()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/scheduler.go:29 +0xda

Previous read at 0x00c420411be0 by goroutine 46:
  [failed to restore the stack]

Goroutine 29 (running) created at:
  github.com/senorprogrammer/wtf/wtf.(*Display).build()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:48 +0x2aa
  github.com/senorprogrammer/wtf/wtf.NewDisplay()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/wtf/display.go:16 +0x38c
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:297 +0x4a8

Goroutine 46 (running) created at:
  main.main()
      /Users/ccummer/go/src/github.com/senorprogrammer/wtf/main.go:302 +0x553
==================
Found 43 data race(s)
michaelMinar commented 6 years ago

Just following up here. Any guesses on how to mitigate these races, even if proper fix doesn't exist yet. I really miss using this dashboard - it was so nice!

senorprogrammer commented 6 years ago

Have you tried a latest version? I managed to fix some of them awhile ago by simplifying the rendering process. I haven't had a chance to dig into the rest of them. For me it's been much more stable since those changes (though not perfect, races still do exist).

anandsudhir commented 5 years ago

When the issues do popup again, I usually just make install again and everything is fine

michaelMinar commented 5 years ago

Thanks for the feedback. Issue still pops up, but the frequency is less since I pulled latest code last week. I would say that the dashboard can run for order 10 minutes without a rendering error now, and once it happens I just resize my terminal and it can reset.

I've tried updating my GO version and reinstalling clean as well. Unfortunately, the issue still persists.

On Mon, 12 Nov 2018 at 03:24, Anand Sudhir Prayaga notifications@github.com wrote:

When the issues do popup again, I usually just make install again and everything is fine

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/senorprogrammer/wtf/issues/315#issuecomment-437845590, or mute the thread https://github.com/notifications/unsubscribe-auth/AK_pU6d_h8y6-SIqjlLGoUj9JmPWxNnpks5uuVpdgaJpZM4WqEBE .

senorprogrammer commented 5 years ago

Yeah, it's definitely not your Go version and rebuilding won't help. It's an issue deeper down between either the code in WTF itself or in tcell (and I'm betting on the issue being in WTF). I'm hoping to have the time to tackle this again soon.

senorprogrammer commented 5 years ago

This situation should be greatly improved by this PR: https://github.com/wtfutil/wtf/pull/414

If you're able, pull master and give it a try. Otherwise it will be included in the next WTF release.

senorprogrammer commented 5 years ago

Closing this out because 0.7.0 fixes this across the general case for widget rendering.