I did this because of the case where you reference empty_node for the first time. For example when webvtt_init_node runs for the first time it will get the empty_node with a refcount of 1 and then it will ref it again because it has no context of whether or not this is the firs time. So you end up with an incorrect ref count. This is a problem in [string.c](https://github.com/mozilla/webvtt/blob/dev/src/libwebvtt/string.c) right now too I believe:

```c++
static webvtt_string_data empty_string = {
  { 1 }, /* init refcount */
  0, /* length */
  0, /* capacity */
  empty_string.array, /* text */
  { '\0' } /* array */
};

WEBVTT_EXPORT void
webvtt_init_string( webvtt_string *result )
{
  if( result && result->d != &empty_string ) {
    webvtt_string_data *d = result->d;
    result->d = &empty_string;
    webvtt_ref( &result->d->refs );
    if( d && ( webvtt_deref( &d->refs ) == 0 ) ) {
      webvtt_free( d );
    }
  }
}
```

I was thinking that what we should do to solve this problem is just always call webvtt_init_node and never use empty_node directly... this isn't the best solution though.