)]}'
{
  "commit": "350f3a02ce225e5d78db8ac96de1351ff9f96dd5",
  "tree": "a383930aca6738e03370e6eac21fcae4b77aabe5",
  "parents": [
    "9a3b74884b2e41c7040611030f4336f13d18fd3e"
  ],
  "author": {
    "name": "Behdad Esfahbod",
    "email": "behdad@behdad.org",
    "time": "Sun Dec 28 17:44:26 2014 -0800"
  },
  "committer": {
    "name": "Behdad Esfahbod",
    "email": "behdad@behdad.org",
    "time": "Sun Dec 28 17:59:28 2014 -0800"
  },
  "message": "[ft] Add hb_ft_face_create_referenced() and hb_ft_font_create_referenced()\n\nWhen I originally wrote hb-ft, FreeType objects did not support reference\ncounting.  As such, hb_ft_face_create() and hb_ft_font_create() had a\n\"destroy\" callback and client was responsible for making sure FT_Face is\nkept around as long as the hb-font/face are alive.\n\nHowever, since this was not clearly documented, some clienets didn\u0027t\ncorrectly did that.  In particular, some clients assumed that it\u0027s safe\nto destroy FT_Face and then hb_face_t.  This, indeed, used to work, until\n45fd9424c723f115ca98995b8f8a25185a6fc71d, which make face destroy access\nfont tables.\n\nNow, I fixed that issue in 395b35903e052aecc97d0807e4f813c64c0d2b0b since\nthe access was not needed, but the problem remains that not all clients\nhandle this correctly.  See:\n\n  https://bugs.freedesktop.org/show_bug.cgi?id\u003d86300\n\nFortunately, FT_Reference_Face() was added to FreeType in 2010, and so we\ncan use it now.  Originally I wanted to change hb_ft_face_create() and\nhb_ft_font_create() to reference the face if destroy\u003d\u003dNULL was passed in.\nThat would improve pretty much all clients, with little undesired effects.\nExcept that FreeType itself, when compiled with HarfBuzz support, calls\nhb_ft_font_create() with destroy\u003d\u003dNULL and saves the resulting hb-font on\nthe ft-face (why does it not free it immediately?).  Making hb-face\nreference ft-face causes a cycling reference there.  At least, that\u0027s my\ncurrent understanding.\n\nAt any rate, a cleaner approach, even if it means all clients will need a\nchange, is to introduce brand new API.  Which this commit does.\n\nSome comments added to hb-ft.h, hoping to make future clients make better\nchoices.\n\nFixes https://bugs.freedesktop.org/show_bug.cgi?id\u003d75299\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8f894a8d367ba3d0d441a2a6b95dc21a608bc17e",
      "old_mode": 33188,
      "old_path": "configure.ac",
      "new_id": "4dc562c48d2bf03637e5f13c3cbfd0c980b4bafe",
      "new_mode": 33188,
      "new_path": "configure.ac"
    },
    {
      "type": "modify",
      "old_id": "0e21573e79da955aea0f30fa09c77e030ea7cb9e",
      "old_mode": 33188,
      "old_path": "src/hb-ft.cc",
      "new_id": "9b2a908445f8ee71bdfe08d2bef96b7134bb8840",
      "new_mode": 33188,
      "new_path": "src/hb-ft.cc"
    },
    {
      "type": "modify",
      "old_id": "696251e143f31987eb599f8cb16db4f12ff8d901",
      "old_mode": 33188,
      "old_path": "src/hb-ft.h",
      "new_id": "92f4b3614415503a939da9409b3794d85e7d7b7b",
      "new_mode": 33188,
      "new_path": "src/hb-ft.h"
    }
  ]
}
