<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>61265</bug_id>
          
          <creation_ts>2026-10-30 08:42:22 +0300</creation_ts>
          <short_desc>colord: утечка памяти при удалении и повторном появлении файла ICC-профиля</short_desc>
          <delta_ts>2026-11-02 14:09:30 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>colord</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vitaly Lipatov">lav</reporter>
          <assigned_to name="Yuri N. Sedunov">aris</assigned_to>
          <cc>aris</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303648</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2026-10-30 08:42:22 +0300</bug_when>
    <thetext>colord-1.4.8-alt1

Если удалить файл ICC-профиля из отслеживаемого каталога в /usr/share/color/icc/ и положить его обратно, colord часто не может повторно зарегистрировать профиль на D-Bus, а объект профиля остаётся в памяти. Каждый такой случай увеличивает память процесса примерно на размер профиля. Если на системе регулярно переустанавливается пакет с несколькими сотнями ICC-профилей, colord за пару месяцев вырастает до нескольких гигабайт.

Апстрим: https://github.com/hughsie/colord/issues/218 (там же разбор по исходникам 1.4.8).

Воспроизведение (под root):

cp /usr/share/color/icc/colord/FOGRA39L_coated.icc /tmp/test.icc
cd-fix-profile /tmp/test.icc set-description &quot;leak test&quot;
mkdir /usr/share/color/icc/test
cp /tmp/test.icc /usr/share/color/icc/test/
ps -o rss= -C colord
for i in $(seq 50); do
    rm /usr/share/color/icc/test/test.icc; sleep 2
    cp /tmp/test.icc /usr/share/color/icc/test/; sleep 2
done
ps -o rss= -C colord

cd-fix-profile меняет описание, чтобы контрольная сумма отличалась от установленного профиля: дубликаты colord пропускает.

Результат: на каждый неудачный цикл в журнале

CdMain: failed to emit ProfileAdded: failed to register object: An object is already exported for the interface org.freedesktop.ColorManager.Profile at /org/freedesktop/ColorManager/profiles/icc_…

Сбой происходит не каждый раз: в прогонах по 50 циклов было от 12 до 46 неудач, по ~125 КиБ на каждую (профиль 121 КиБ). Если удалить и заново поставить пакет с 307 профилями (177 уникальных), получается 177 предупреждений и около +70 МиБ.

Ожидается: при удалении файла объект профиля снимается с регистрации, при повторном появлении регистрируется заново, память не растёт.

Уборка: rm -r /usr/share/color/icc/test /tmp/test.icc; systemctl restart colord</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303652</commentid>
    <comment_count>1</comment_count>
      <attachid>22841</attachid>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2026-10-30 09:54:14 +0300</bug_when>
    <thetext>Created attachment 22841
Исправление утечек при удалении файла профиля (апстрим PR #219), для 1.4.8

Исправление отправлено в апстрим: https://github.com/hughsie/colord/pull/219 . Патч из этого PR прикреплён, на 1.4.8 накладывается чисто (patch -p1).

Причина: при удалении файла профиля не освобождаются две ссылки, полученные с transfer full:
1. lib/colord/cd-icc-store.c, cd_icc_store_file_monitor_changed_cb(): CdIcc из cd_icc_store_find_by_filename() остаётся в памяти вместе с данными профиля. Это и есть рост памяти.
2. src/cd-main.c, cd_main_icc_store_removed_cb(): CdProfile из cd_profile_array_get_by_filename() не уничтожается, его объект остаётся на D-Bus, поэтому при повторном появлении файла выдаётся «already exported».

Проверка на Sisyphus (демон и libcolordprivate с патчем, профиль 121 КиБ удаляется и возвращается):
- 90 циклов: без патча RSS 13,5 → 24,9 МиБ, с патчем 13,3 → 13,3 МиБ;
- 30 циклов: без патча 30 предупреждений «already exported», с патчем 0; профиль каждый раз регистрируется заново.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303770</commentid>
    <comment_count>2</comment_count>
    <who name="Yuri N. Sedunov">aris</who>
    <bug_when>2026-11-02 14:09:30 +0300</bug_when>
    <thetext>colord-1.4.9-alt0.5</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22841</attachid>
            <date>2026-10-30 09:54:14 +0300</date>
            <delta_ts>2026-10-30 09:54:14 +0300</delta_ts>
            <desc>Исправление утечек при удалении файла профиля (апстрим PR #219), для 1.4.8</desc>
            <filename>colord-1.4.8-up-pr219-profile-leaks.patch</filename>
            <type>text/plain</type>
            <size>2963</size>
            <attacher name="Vitaly Lipatov">lav</attacher>
            
              <data encoding="base64">RnJvbSA3NDc5NTFmZDhlNWZiOTI2NTU1YWRiMzQ5YjAyYjcwYzFmNjQ3NGVmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBWaXRhbHkgTGlwYXRvdiA8bGF2QGV0ZXJzb2Z0LnJ1PgpEYXRl
OiBGcmksIDMwIE9jdCAyMDI2IDA5OjI5OjU1ICswMzAwClN1YmplY3Q6IFtQQVRDSCAxLzJdIGxp
YjogRml4IGEgQ2RJY2MgbGVhayB3aGVuIGEgcHJvZmlsZSBmaWxlIGlzIGRlbGV0ZWQKCmNkX2lj
Y19zdG9yZV9maW5kX2J5X2ZpbGVuYW1lKCkgcmV0dXJucyBhIG5ldyByZWZlcmVuY2UsIGJ1dCB0
aGUKR19GSUxFX01PTklUT1JfRVZFTlRfREVMRVRFRCBoYW5kbGVyIG5ldmVyIGRyb3BwZWQgaXQu
IEV2ZXJ5IGRlbGV0ZWQKcHJvZmlsZSBmaWxlIHRoZXJlZm9yZSBsZWFrZWQgdGhlIENkSWNjIG9i
amVjdCB0b2dldGhlciB3aXRoIHRoZSBwcm9maWxlCmRhdGEsIHNvIHRoZSBkYWVtb24gZ3JldyBi
eSBhYm91dCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBlYWNoIHRpbWUgYSBmaWxlCmluIGEgd2F0Y2hl
ZCBkaXJlY3Rvcnkgd2FzIHJlbW92ZWQsIGUuZy4gb24gZXZlcnkgcGFja2FnZSByZWluc3RhbGwu
CgpGaXhlczogaHR0cHM6Ly9naXRodWIuY29tL2h1Z2hzaWUvY29sb3JkL2lzc3Vlcy8yMTgKCkNv
LUF1dGhvcmVkLUJ5OiBDbGF1ZGUgT3B1cyA1LjUgPG5vcmVwbHlAYW50aHJvcGljLmNvbT4KLS0t
CiBsaWIvY29sb3JkL2NkLWljYy1zdG9yZS5jIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5z
ZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2NvbG9yZC9jZC1pY2Mt
c3RvcmUuYyBiL2xpYi9jb2xvcmQvY2QtaWNjLXN0b3JlLmMKaW5kZXggZjYyNjA3My4uZWI2ZTQ1
ZiAxMDA2NDQKLS0tIGEvbGliL2NvbG9yZC9jZC1pY2Mtc3RvcmUuYworKysgYi9saWIvY29sb3Jk
L2NkLWljYy1zdG9yZS5jCkBAIC0yOTksNyArMjk5LDcgQEAgY2RfaWNjX3N0b3JlX2ZpbGVfbW9u
aXRvcl9jaGFuZ2VkX2NiIChHRmlsZU1vbml0b3IgKm1vbml0b3IsCiAJCQkJICAgICAgQ2RJY2NT
dG9yZSAqc3RvcmUpCiB7CiAJQ2RJY2NTdG9yZVByaXZhdGUgKnByaXYgPSBHRVRfUFJJVkFURSAo
c3RvcmUpOwotCUNkSWNjICp0bXA7CisJZ19hdXRvcHRyKENkSWNjKSB0bXAgPSBOVUxMOwogCUNk
SWNjU3RvcmVEaXJIZWxwZXIgKmhlbHBlcjsKIAlnX2F1dG9mcmVlIGdjaGFyICpwYXRoID0gTlVM
TDsKIAotLSAKMi41MC4xCgoKRnJvbSAzNWU4MDM1M2Q5NDc2MTYxMmNjZmUzM2Q0OGE2Mzg0MWNh
OGQ3MDg2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBWaXRhbHkgTGlwYXRvdiA8bGF2
QGV0ZXJzb2Z0LnJ1PgpEYXRlOiBGcmksIDMwIE9jdCAyMDI2IDA5OjMwOjA0ICswMzAwClN1Ympl
Y3Q6IFtQQVRDSCAyLzJdIFVuZXhwb3J0IHRoZSBwcm9maWxlIHdoZW4gaXRzIElDQyBmaWxlIGlz
IHJlbW92ZWQKCmNkX3Byb2ZpbGVfYXJyYXlfZ2V0X2J5X2ZpbGVuYW1lKCkgcmV0dXJucyBhIG5l
dyByZWZlcmVuY2UsIGJ1dApjZF9tYWluX2ljY19zdG9yZV9yZW1vdmVkX2NiKCkgbmV2ZXIgZHJv
cHBlZCBpdC4gVGhlIENkUHJvZmlsZSB3YXMgbmV2ZXIKZmluYWxpemVkLCBzbyBpdHMgRC1CdXMg
b2JqZWN0IHN0YXllZCBleHBvcnRlZCBhZnRlciB0aGUgZmlsZSB3YXMKZGVsZXRlZCwgYW5kIHJl
LWNyZWF0aW5nIHRoZSBzYW1lIGZpbGUgZmFpbGVkIHdpdGg6CgogIENkTWFpbjogZmFpbGVkIHRv
IGVtaXQgUHJvZmlsZUFkZGVkOiBmYWlsZWQgdG8gcmVnaXN0ZXIgb2JqZWN0OgogIEFuIG9iamVj
dCBpcyBhbHJlYWR5IGV4cG9ydGVkIGZvciB0aGUgaW50ZXJmYWNlCiAgb3JnLmZyZWVkZXNrdG9w
LkNvbG9yTWFuYWdlci5Qcm9maWxlIGF0IC4uLi9wcm9maWxlcy9pY2NfPGNoZWNrc3VtPgoKQWxz
byBkcm9wIHRoZSBwcm9maWxlIGZyb20gdGhlIGFycmF5IHdoZW4gcmVnaXN0ZXJpbmcgaXQgb24g
dGhlIGJ1cwpmYWlscywgc28gdGhhdCBhIGZhaWxlZCBhZGQgbm8gbG9uZ2VyIGxlYXZlcyBhbiB1
bmV4cG9ydGVkIHByb2ZpbGUKYmVoaW5kIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGRhZW1vbi4K
CkZpeGVzOiBodHRwczovL2dpdGh1Yi5jb20vaHVnaHNpZS9jb2xvcmQvaXNzdWVzLzIxOAoKQ28t
QXV0aG9yZWQtQnk6IENsYXVkZSBPcHVzIDUuNSA8bm9yZXBseUBhbnRocm9waWMuY29tPgotLS0K
IHNyYy9jZC1tYWluLmMgfCAzICsrLQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwg
MSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9jZC1tYWluLmMgYi9zcmMvY2QtbWFpbi5j
CmluZGV4IGVjN2I4NDIuLjJkOGEzMjYgMTAwNjQ0Ci0tLSBhL3NyYy9jZC1tYWluLmMKKysrIGIv
c3JjL2NkLW1haW4uYwpAQCAtMTY1Niw2ICsxNjU2LDcgQEAgY2RfbWFpbl9pY2Nfc3RvcmVfYWRk
ZWRfY2IgKENkSWNjU3RvcmUgKmljY19zdG9yZSwKIAlpZiAoIXJldCkgewogCQlnX3dhcm5pbmcg
KCJDZE1haW46IGZhaWxlZCB0byBlbWl0IFByb2ZpbGVBZGRlZDogJXMiLAogCQkJICAgZXJyb3It
Pm1lc3NhZ2UpOworCQljZF9wcm9maWxlX2FycmF5X3JlbW92ZSAocHJpdi0+cHJvZmlsZXNfYXJy
YXksIHByb2ZpbGUpOwogCQlyZXR1cm47CiAJfQogfQpAQCAtMTY2Niw3ICsxNjY3LDcgQEAgY2Rf
bWFpbl9pY2Nfc3RvcmVfcmVtb3ZlZF9jYiAoQ2RJY2NTdG9yZSAqaWNjX3N0b3JlLAogCQkJICAg
ICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQogewogCUNkTWFpblByaXZhdGUgKnByaXYgPSAoQ2RNYWlu
UHJpdmF0ZSAqKSB1c2VyX2RhdGE7Ci0JQ2RQcm9maWxlICpwcm9maWxlOworCWdfYXV0b3B0cihD
ZFByb2ZpbGUpIHByb2ZpbGUgPSBOVUxMOwogCiAJLyogY2hlY2sgdGhlIHByb2ZpbGUgc2hvdWxk
IGJlIGludmFsaWRhdGVkIGF1dG9tYXRpY2FsbHkgKi8KIAlwcm9maWxlID0gY2RfcHJvZmlsZV9h
cnJheV9nZXRfYnlfZmlsZW5hbWUgKHByaXYtPnByb2ZpbGVzX2FycmF5LAotLSAKMi41MC4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>