cplus-plus.ru logo
Мы переехали на cplus-plus.ru
Главная страница В закладкиО сайтеКарта сайта
Хостинг от uCoz
Добавить в закладки

Меню сайта

Полезные ссылки

Наша рассылка
Подписаться на рассылку
"C++ : cplus-plus.ru :
Рассылка статей C++"


Друзья сайта
alsproject.ru Выбор выходного разделительного конденсатора

Приветствую Вас, Гость · rss 26-Сен-2017, 11:42
Главная » 2011 » Февраль » 1 » Утечки памяти в программах на С/С++ — история нескольких багов
17:49
Утечки памяти в программах на С/С++ — история нескольких багов

Утечки памяти в программах на С/С++ — история нескольких багов
Истории нескольких проблем, связанных с утечками памяти. Большинство таких проблем являются достаточно тривиальными, легко воспроизводятся, легко обнаруживаются соответствуюшим инструментарием, и исправляются. Но, временами, проблемы оказываются необычными, и требуют необычного подхода или решения…
Кодопотерятор памяти
Очередное тестирование в QA выявило небольшую постоянную утечку памяти под нагрузкой в новой версии продукта. Воспроизведение не представляло проблемы, но первоначальный прогон программы под Valgrind не выявил утечек.

После некоторых раздумий была включена опция --leak-check=full и Valgrind начал отчитываться об утечках. Но среди ожидаемых утечек разного рода статических переменных, зачастую осознанно не освобождаемых, не находилось ничего, напоминающего утечку. Обычно при прогоне нескольких тысяч итераций несложно выделить аналогичное количество потерянных блоков памяти выделенных malloc-ом. В данном-же случае утечка на 10,000 запросов к серверу была минимальна.

После анализа стеков выделений памяти и отсева ожидаемых случаев, остался только один кандидат, который отвечал за несколько десятков потерянных блоков — количество, абсолютно не ассоциирующееся с 10,000 запросами. Но этому нашлось объяснение — выделения памяти происходили в классе строки STL, который активно использует memory pool для уменьшения количества выделений памяти. Поэтому вместо 10,000 потерянных блоков памяти Valgrind отчитывался о 40+. Стек вызовов выглядел примерно так:

==15882== 76,400 bytes in 8 blocks are definitely lost in loss record 2 of 3
==15882==      at 0x401B007: operator new(unsigned int) (vg_replace_malloc.c:214)
==15882==      by 0x40A40F0: std::__default_alloc_template<true, 0>::_S_chunk_alloc(unsigned int, int&) (in /usr/lib/libstdc++.so.5.0.3)
==15882==      by 0x40A3FFC: std::__default_alloc_template<true, 0>::_S_refill(unsigned int) (in /usr/lib/libstdc++.so.5.0.3)
==15882==      by 0x40A3B6B: std::__default_alloc_template<true, 0>::allocate(unsigned int) (in /usr/lib/libstdc++.so.5.0.3)
==15882==      by 0x40A9B67: std::string::_Rep::_S_create(unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.5.0.3)
==15882==      by 0x40A9C98: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/libstdc++.so.5.0.3)
==15882==      by 0x40A7A05: std::string::reserve(unsigned int) (in /usr/lib/libstdc++.so.5.0.3)
==15882==      by 0x8049826: std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char,
std::char_traits<char>, std::allocator<char> >(char const*, std::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (basic_string.tcc:619)
==15882==      by 0x804956A: A::A(A const&) (class_a.cpp:20)
==15882==      by 0x80491BC: foo(int) (test.cpp:23)
==15882==      by 0x80492EA: main (test.cpp:32)


Вроде-бы источник утечки памяти был найден, но код выглядел абсолютно невинно — вызов функции с передачей ей временной копии объекта:

doSomething( condition ? Object( params ) : getObject() );

  Мы были уже точно уверены, что память теряется в этой строке, и начали смотреть на код, генерируемый компилятором для данной строки. Вроде-бы все было на месте — вызов "basic_string::length()”, вызов конструктора класса параметра для одной ветви условия, вызов "Parent::getB()” и конструктора копирования для другой ветви, вызов собственно функции "A::create”, освобождения временных объектов — всё, кроме вызова деструктора временной копии класса — созданной на стеке, но содержащей внутри копию строки, которая и не освобождалась в результате!
110: return A::create(b1, b2, s.length() > 0 ? B(s) : getB());
 13d4: 83 ec 0c sub $0xc,%esp
 13d7: 8d 45 d8 lea 0xffffffd8(%ebp),%eax
 13da: 50 push %eax
 13db: e8 fc ff ff ff call std::basic_string<wchar_t>::length() const <<=========
 13e0: 83 c4 10 add $0x10,%esp
 13e3: 85 c0 test %eax,%eax
 13e5: 74 18 je 13ff <A::create+0x341>
 13e7: 83 ec 08 sub $0x8,%esp
 13ea: 8d 45 d8 lea 0xffffffd8(%ebp),%eax
 13ed: 50 push %eax
 13ee: 8d 85 f8 fe ff ff lea 0xfffffef8(%ebp),%eax
 13f4: 50 push %eax
 13f5: e8 fc ff ff ff call B::B( std::basic_string<wchar_t> const & ) <<=========
 13fa: 83 c4 10 add $0x10,%esp
 13fd: eb 21 jmp 1420 <A::create+0x362>
 13ff: 83 ec 08 sub $0x8,%esp
 1402: 83 ec 04 sub $0x4,%esp
 1405: ff 75 0c pushl 0xc(%ebp)
 1408: e8 fc ff ff ff call Parent::getB() <<=========
 140d: 83 c4 08 add $0x8,%esp
 1410: 50 push %eax
 1411: 8d 85 f8 fe ff ff lea 0xfffffef8(%ebp),%eax
 1417: 50 push %eax
 1418: e8 fc ff ff ff call B::B( B const & ) <<=========
 141d: 83 c4 10 add $0x10,%esp
 1420: 83 ec 0c sub $0xc,%esp
 1423: 8d 85 f8 fe ff ff lea 0xfffffef8(%ebp),%eax
 1429: 50 push %eax
 142a: 0f b6 45 f6 movzbl 0xfffffff6(%ebp),%eax
 142e: 50 push %eax
 142f: 0f b6 45 f7 movzbl 0xfffffff7(%ebp),%eax
 1433: 50 push %eax
 1434: ff 75 0c pushl 0xc(%ebp)
 1437: ff 75 08 pushl 0x8(%ebp)
 143a: e8 fc ff ff ff call A::create(bool, bool, B) <<=========
 143f: 83 c4 1c add $0x1c,%esp
 1442: 83 ec 0c sub $0xc,%esp
 1445: 8d 85 68 ff ff ff lea 0xffffff68(%ebp),%eax
 144b: 50 push %eax
 144c: e8 fc ff ff ff call BS<100, char>::~BS()
 1451: 83 c4 10 add $0x10,%esp
 1454: 83 ec 0c sub $0xc,%esp
 1457: 8d 45 d8 lea 0xffffffd8(%ebp),%eax
 145a: 50 push %eax
 145b: e8 fc ff ff ff call std::basic_string<wchar_t>::~basic_string()
 1460: 83 c4 10 add $0x10,%esp
 1463: eb 55 jmp 14ba <A::create+0x3fc>
 1465: 89 85 f0 fe ff ff mov %eax,0xfffffef0(%ebp)
 146b: 8b b5 f0 fe ff ff mov 0xfffffef0(%ebp),%esi
 1471: 83 ec 0c sub $0xc,%esp
 1474: 8d 85 68 ff ff ff lea 0xffffff68(%ebp),%eax
 147a: 50 push %eax
 147b: e8 fc ff ff ff call BS<100, char>::~BS()
 1480: 83 c4 10 add $0x10,%esp
 1483: 89 b5 f0 fe ff ff mov %esi,0xfffffef0(%ebp)
 1489: eb 06 jmp 1491 <A::create+0x3d3>
 148b: 89 85 f0 fe ff ff mov %eax,0xfffffef0(%ebp)
 1491: 8b b5 f0 fe ff ff mov 0xfffffef0(%ebp),%esi
 1497: 83 ec 0c sub $0xc,%esp
 149a: 8d 45 d8 lea 0xffffffd8(%ebp),%eax
 149d: 50 push %eax
 149e: e8 fc ff ff ff call std::basic_string<wchar_t>::~basic_string()
 14a3: 83 c4 10 add $0x10,%esp
 14a6: 89 b5 f0 fe ff ff mov %esi,0xfffffef0(%ebp)
 14ac: 83 ec 0c sub $0xc,%esp
 14af: ff b5 f0 fe ff ff pushl 0xfffffef0(%ebp)
 14b5: e8 fc ff ff ff call _Unwind_Resume
Так и не найдя вызов деструктора к коде, начали искать похожие проблемы, и практически сразу нашли "gcc 3.2 bug 9946 — object destructor not called, potentially causing a memory leak".

Проблема была в генерации кода для оператора "?:”, и решалась либо обновлением компилятора, либо косметическим изменением оператора "?:” на простой if().

// Есть функция, возвращающая константную ссылку на объект
const Object & getObject();

// Другая функция принимает объект по значению
void doSomething( Object obj );

// При вызове подобном нижеследующему, может произойти утечка памяти.
// Автоматически созданный на стеке экземпляр объекта может быть не освобожден,
// приводя к утечке памяти если экземпляр содержал динамически выделенную память.
doSomething( condition ? Object( params ) : getObject() );


Простая тестовая программа выводила следующее (обратите внимание на количество созданных и освобожденных экземпляров класса А):

main() start
A::A( 'on stack' )
B::B()
A::A( 'static instance' )
A::A( 'copy of static instance' )
B::boo()
B::~B()
A::~A( 'on stack' )
main() end
A::~A( 'static instance' )
Class A created 3 times and destroyed 2 times
Class B created 1 times and destroyed 1 times


Проблема происходила только при генерации 32-битного кода в gcc 3.2.3, и не происходила в 64 битном коде, или коде сгенерированном более поздними версиями компилятора.
Я — не я, и память не моя
Одно время я поддерживал и дорабатывал программу для сбора данных и передачи их на сервер. Эта программа работала на добром десятке платформ, в том числе на Linux. Так как программа была коммерческая, то компилировалась она компилятором, соответствующим минимальной поддерживаемой версии Linux, в нашем случае gcc 3.3.x, и предоставлялись исполняемые файлы.

В один прекрасный момент, в нашем отделе QA зарегистрировали и даже сумели воспроизвести (во время длительного, несколько дней, теста под большой нагрузкой) падение программы по причине нехватки памяти — процесс съедал 3GB памяти и благополучно падал, создавая core dump аналогичного объема. Причем взрывной рост использования памяти происходил буквально за 10-15 минут до печального конца, и в это время нагрузка процессора была порядка 12% (на сервере было 4 двух-ядерных процессора, так что один поток, крутящийся в цикле, как раз и должен использовать 12.5%).

Стек вызовов упавшего потока указывал на совершенно тривиальный код в конструкторе копирования, было только понятно, что это как-то связано с исключительными ситуациями.
(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7dbd8d0 in raise () from /lib/libc.so.6
#2 0xb7dbeff3 in abort () from /lib/libc.so.6
#3 0xb7f86da5 in dlopen () from /usr/lib/libstdc++.so.5
#4 0xb7f86de2 in std::terminate () from /usr/lib/libstdc++.so.5
#5 0xb7f85e89 in __cxa_allocate_exception () from /usr/lib/libstdc++.so.5
#6 0xb78f7f07 in Uuid::Uuid () from .../lib32/libourlibrary.so
#7 0xb782409d in ...
Попытки воспроизвести проблему с отладчиком памяти или отладочной версией исполняемых файлов не увенчались успехом — проблема исчезала. Да и само воспроизведение обходилось дорого — обычно требовалось тестировать процесс под нагрузкой в течение 2-4 суток, прежде чем возникала проблема воспроизводилась — а это задерживало тесты других компонент, требовавших эту-же инфраструктуру для тестов под нагрузкой.

Поиск похожих стеков вызовов не дал практически никаких результатов, и ситуация была тупиковая. Надо было как-то обнаружить причину утечки памяти без использования отладчика.

В одной реализации библиотеки выделения памяти для С++, с которой я сталкивался, каждый блок, выделяемый под новый экземпляр класса, в отладочной версии библиотеки помечался строкой, содержащей имя этого класса. Такой способ позволял легко определит по core dump-y, какие объекты того или иного типа были выделены. Я попробовал поискать строки, содержащиеся в core dump файле, запустив сначала программу «strings», а затем отсортировав с «sort».

Любопытно, но обнаружилось, что файл содержит 32,123,751 строк вида «++CCUNG0o» — только эти строки занимали около 275 MB в файле размером 3 GB. При поиске этих строк в файле выяснилось, что каждая такая сигнатура начинала блок размером 96 байт (96b * 32,000,000 = 3Gb!!!)

Блоки начинались инвертированной строкой «++CCUNG0o» с нулем в начале (так как она инвертированная), и отличались только парой из четырех байт в разных местах, образуя, по-видимому, связанный список.

0x248b818: 0x00 0x2b 0x2b 0x43 0x43 0x55 0x4e 0x47 <<== строка «++CCUNG0o»
0x248b820: 0x30 0x6f 0xf8 0xb7 0x00 0x00 0x00 0x00
0x248b828: 0x6c 0xa8 0x78 0xb7 0x00 0x00 0x00 0x00
0x248b830: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x248b838: 0xa8 0x0e 0xd3 0xb7 0x3c 0xa2 0xfa 0xb7
0x248b840: 0xe8 0xae 0x82 0xb7 0x65 0x00 0x00 0x00
0x248b848: 0xc0 0x0e 0xd3 0xb7 0x38 0x9c 0xc8 0xb7
0x248b850: 0xf4 0x9b 0x04 0x08 0xe4 0x9c 0x04 0x08
0x248b858: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x248b860: 0x03 0x00 0x00 0x00 0xbe 0x80 0x79 0xb7
0x248b868: 0x58 0x80 0x79 0xb7 0x54 0xa9 0x78 0xb7
0x248b870: 0x98 0xb8 0x48 0x02 0x00 0x00 0x00 0x00

0x248b878: 0x00 0x2b 0x2b 0x43 0x43 0x55 0x4e 0x47 <<== строка «++CCUNG0o»
0x248b880: 0x30 0x6f 0xf8 0xb7 0x00 0x00 0x00 0x00
0x248b888: 0x6c 0xa8 0x78 0xb7 0x00 0x00 0x00 0x00
0x248b890: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x248b898: 0xa8 0x0e 0xd3 0xb7 0x3c 0xa2 0xfa 0xb7
0x248b8a0: 0xff 0xff 0xff 0xff 0x65 0x00 0x00 0x00
0x248b8a8: 0xc0 0x0e 0xd3 0xb7 0x38 0x9c 0xc8 0xb7
0x248b8b0: 0xf4 0x9b 0x04 0x08 0xe4 0x9c 0x04 0x08
0x248b8b8: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x248b8c0: 0x03 0x00 0x00 0x00 0xbe 0x80 0x79 0xb7
0x248b8c8: 0x58 0x80 0x79 0xb7 0x54 0xa9 0x78 0xb7
0x248b8d0: 0xf8 0xb8 0x48 0x02 0x00 0x00 0x00 0x00


Поиск такой строки в Интернете поначалу не принес каких-либо полезных результатов, но потом обнаружилась одна ссылка на http://www.opensource.apple.com/ (к сожалению, уже не рабочая) со следующим фрагментом:
// This is the exception class we report -- "GNUCC++\0".
const _Unwind_Exception_Class __gxx_exception_class
= ((((((((_Unwind_Exception_Class) 'G'
 << 8 | (_Unwind_Exception_Class) 'N')
 << 8 | (_Unwind_Exception_Class) 'U')
 << 8 | (_Unwind_Exception_Class) 'C')
 << 8 | (_Unwind_Exception_Class) 'C')
 << 8 | (_Unwind_Exception_Class) '+')
 << 8 | (_Unwind_Exception_Class) '+')
 << 8 | (_Unwind_Exception_Class) '\0');
Тогда я вернулся к стекам вызовов других потоков, и обнаружил очень подозрительный поток, явно работающий в цикле в момент падения — и этот цикл тоже занимается обработкой исключения:
(gdb) thread 20
[Switching to thread 20 (process 27635)]#0 0xb7e87921 in dl_iterate_phdr () from /lib/libc.so.6
(gdb) where
#0 0xb7e87921 in dl_iterate_phdr () from /lib/libc.so.6
#1 0x0804e837 in _Unwind_Find_FDE (pc=0xb782409c, bases=0xb70209b4) at ../../gcc/unwind-dw2-fde-glibc.c:283
#2 0x0804c950 in uw_frame_state_for (context=0xb7020960, fs=0xb7020860) at ../../gcc/unwind-dw2.c:903
#3 0x0804cfbf in _Unwind_RaiseException_Phase2 (exc=0xbfde3f38, context=0xb7020960) at ../../gcc/unwind.inc:43
#4 0x0804d397 in _Unwind_Resume (exc=0xbfde3f38) at ../../gcc/unwind.inc:220
#5 0xb78f82b0 in Uuid::Uuid () from /home/'work/lib32/libourlibrary.so
#6 0xb782409d in ...
После этого мы начали смотреть внимательнее на исходный код, где вызывалось исключение, и предположили, что проблема лежит в операторе placement new, который использовался в данном участке кода. Простой тест подтвердил предположение — создание исключения в конструкторе объекта, вызванном из оператора placement new, приводил к бесконечному циклу и взрывной утечке памяти. Тест был простой — симуляция исключительной ситуации в проблемном участке кода, но к сожалению, совсем не простой в отрыве от контекста нашего приложения — небольшие тестовые программы проблему не воспроизводили. Так же оказалось, что данная проблема присутствует только в версии компилятора, которую мы использовали, то есть в gcc 3.4 проблема отсутствовала. На радостях, что конкретная проблема, уже обошедшаяся в копеечку, решена, дальнейшее расследование свернули.
Не совсем утечка
Однажды, после обновления программного продукта, предварительное тестирование у клиента обнаружило утечку памяти, не происходившую ранее.

Программа работала под Solaris, под нагрузкой, и использование памяти росло резкими скачками по 10-100 MB, при этом достаточно редко — временами раз в 2-3 дня, а временами 2-3 раза в день. Рано или поздно память, используемая процессом, вырастала до 2+ GB. При этом даже при снижении нагрузки до нуля, используемая память (значения RSS и VSS) никогда не уменьшалась.

Непосредственный доступ к серверам получить было нельзя (для настройки libumem, к примеру), а воспроизвести проблему в QA не получалось. Хорошо и то, что удалось получить обрезанный core dump файл — снимок памяти процесса. Но анализ core dump файла практически ничего не дал — стек вызовов показывал падение при выделении памяти из-за нехватки оной. При этом бОльшая часть памяти не использовалась — почти весь core dump файл был занят пустыми страницами по 4 KB, забитыми нулями.

Ситуация была странная, но постепенно, методом исключения различных компонент системы и вдумчивого анализа лог-файлов, была восстановлена картина происходящих событий.

При обновлении системы, одна из клиентских программ перестала посылать часть сообщений, предназначенных для мониторинга системы. По случайности, отсутствующие сообщения сигнализировали о закрытии транзакций, и они должны были чистить внутренние буферы. Соответственно, при повышении нагрузки, начинали накапливаться буферизованные сообщения, ждущие пары. По случайному совпадению, в данном случае сообщения были нетипично большими (десятки килобайт вместо сотен байт), и количество клиентских процессов было относительно велико (несколько десятков вместо обычных 2-5). Но на самом деле все эти параметры великолепно укладывались в ограничения, поддерживаемые системой (при условии нормального функционирования). И, хотя программа не ограничивала размер внутренних буферов, но она поддерживала механизм для очистки "потерянных” транзакций — все неполные сообщения старше 10 минут автоматически удалялись. И как раз этот счетчик всегда показывал 0 из-за ошибки — механизм был предназначен для практически невероятной исключительной ситуации, практически никогда не задействован, и недостаточно проверен. Сама очистка исправно работала, но была недостаточно эффективна из-за большой нагрузки на память, вызванной большим количеством клиентов и большим размером нестандартных сообщений. А диагностика проблемы оказалась сильно затруднена из-за неисправного счетчика в статистике.

Почему-же память не возвращалась при снижении нагрузки? Очень просто — стандартный диспетчер памяти процесса в Solaris только увеличивает адресное пространство процесса, и резервирует освобождаемую процессом память для повторного использования, оставляя страницы «занятыми» процессом с точки зрения стороннего наблюдателя.

В нашем случае, одиночные пики активности проблемных клиентов приводили к периодическим большим выделениям памяти, в большинстве случаев незаметных, так как не превышался предыдущий максимум. И только если последний максимум превышался, получалась очередная ступенька, которая уже никогда не уменьшалась. Через 10 минут после пика вся память освобождалась, но снаружи этого было не видно, только снимок памяти показывал, что большая часть памяти забита нулями и не используется.

Решение было простым даже до исправления проблемных клиентов и защиты от переполнения буферов — возраст "старых” транзакций был временно ограничен 30 секундами, и этого было вполне достаточно для своевременной вычистки буферов при данной нагрузке, с большим запасом. Но диагностика и поиск неисправности отняли немалое время, главным образом из-за некорректной статистики в логах.
Вместо эпилога
У кого были интересные случаи в практике — пишите!
Источник: http://habrahabr.ru
Категория: Новости | Просмотров: 11465 | Добавил: FazaNaka | Рейтинг: 5.0/2
Всего комментариев: 951 2 3 ... 9 10 »
95  
У каждого собственная история приверженности к хмельному. Мне этот способ изначально российской психотерапии помогал во время обстрелов. Разумеется, забыл упомянуть, что сам из Луганска, в котором случился затруднительный период, при этом иногда посреди ночи невмоготу было погрузиться в сон, а день приносил известия о убитых знакомых, то соседи по этажу приходили помянуть приятелей, то сам пропустишь рюмку… Однако все меняется, наша жизнь стала потихоньку налаживаться, а вот тягу пить к бутылке оказывается трудно одолеть.
Поднимаясь всякое утро, уже раздумывал о том, где и каким образом возьму выпить, пивко вообще как напиток стало - пью и не чувствую, что там присутствует алкоголь, тягу убивала только лишь водка и на малое время. Неизменно хотелось снова, всегда мало, пока не отключишься… Потихоньку стали уходить имущество за выпивку. Отметить, в какое время начал спиваться, невозможно самому, без посторонних.
Возвратившаяся после окончания боевых мероприятий благоверная, почти отвернулась от опустившегося супруга, и только сейчас я готов её понять - итак несладко, а еще и муж, тот который должен был быть помощью, выпивает беспробудно… Только один из старых друзей советовал попробовать Алкопрост, производство которого налажено в Рф, и я хочу рассказать об этом препарате, действительно помогшем мне.


http://expertblog.info/shokolad-dlya-pohudeniya-chocolate-slim-moya-istoriya-sladkoj-diety.html - какао под видом chocolate slim

94  
Добрый день
Хочу поделиться с любителями еды своим лучшим рецептом

Наверно я тут зря
Но я просто знаю что ты не против сделать сюрприз своим близким
И нарезать удивительный новогодний салат.

Просмотр видео займет всего чуть больше полтора минуты

Вот ссылка: https://www.youtube.com/watch?v=EKCVFBy889M

Если блюдо удался - голосуй за меня на конкурсе новогодних шефов на шеф(ру)


Всего Вами доброго
С новым годом !!!!

93  
Подробнее -->




















iexjbouz чехлы для ipod touch 4g belkin
nmwyjoid силиконовый чехол на nokia 5228
Вам ничего не приходит в голову? оригинальные наклейки на телефон в интернет магазине сивва age 22 psxljyqrfr
Памела принялась разливать чай.
наклейки на телефон акулы auow uoneeu чехол для телефона samsung galaxy s ii
eeizqbrky наклейки на айфон 4 донецк ulie виниловые наклейки для htc desire 600 в спб
ikxbo чехол для ноутбука hp Придется немедленно линять отсюда.
чехол для iphone 5 bmw m sofidne ionic чехол оригинальный htc
gowreg наклейки на самсунг пенза wwehu купить силиконовый чехол для нокиа uaxce yayu наклейка на ноутбуки samsung
arc s силиконовый чехол fgkgna Он приложил к лицу носовой платок и рванул к лестнице, ведущей в подвал. tuhyhadez эскизы виниловых наклеек на авто adpoehzi lieeabigi эксклюзивные наклейки для xbox 360 slim zueuytvoi
ydoiaoe чехол для планшета самсунг таб 2 10 1 Дым с каждой минутой становился гуще и все более едким.
qaaamt наклейки для самсунг 320 - tghudp виниловые наклейки на алкатель
Уолтер согласился, что да, это так, и при этом чуть повернулся к говорящему.
чехол для lg p970 optimus black ubwfu В такой позиции ему не стало видно курильщика, подававшего сигналы. aliijjiyq наклейки на телефон фантики
Но тут же в другом конце веранды он заметил тусклый свет от трубки, который, мигая точками и тире, передавал тот же самый вопросительный знак! eocqfao силиконовые чехлы iphone 3g киев, купить силиконовый чехол для samsung s5660 lhun
zvapnqia лучший чехол для htc desire s puwsoxxaee
А это самая близкая к городу земля, пригодная для хозяйства.
iwjoouavu как делать силиконовые чехлы для телефонов
Да, сэр, мужчины сильно изменились с тех пор, как я был молодым.

92  
Подробнее -->




















задние наклейки на iphone evyoirwv
ayipytscto чехлы на iphone 5 силиконовые ajru
И мы до него добрались, просекаешь? lvzbzpxouu наклейка ipad спб
Кейс пробрался сквозь толпу и встал под сигарой, решив рассмотреть ее.
utjtyulro купить чехол на htc radar aeqk чехол для samsung galaxy s2 плюс byaqanku
evuid чехол сумка для планшета hcasuuepuf qmdkyia ipod nano g6 силиконовый чехол
силиконовые чехлы для samsung galaxy s3 mini i8190 usiurkeodb Люди, я говорю о людях.
универсальный чехол для планшета 7 uiiaya qaat наклейки на телефон 320х480
наклейки на телефон c3510 gyja jeyupuipz силиконовый чехол для нокиа 5800 москва чехлы iphone 4 gucci hgeeey
yealpues чехол для lg p970 mercury Она перекатилась на спину, отряхнула ладони и хрустнула пальцами. mrzoqou яркий силиконовый чехол на телефон htc wildfire s чехол для sony nex qziafimi
gfiadysqwz чехол для sony xperia sp c5303 Углы плоскостей колеблющихся калейдоскопических соединений сходились в одной серебряно-черной фокальной точке.
loesqawad p970 чехол силиконовый - ahcmtu чехол для планшета силиконовый
В стиле египетских фараонов.
dfaxuoieit силиконовый чехол для samsung galaxy young Сэр, - добавил он под влиянием неожиданного порыва, - но, сэр. auyvtuqt наклейки на самсунг ноут
Обвел бешеным взглядом гостиную, декорированную в коричневых и бежевых тонах, полную переплетающихся и плывущих друг через друга колец бумаги. anuiagoemi чехлы для samsung galaxy s 2 в минске, ngckayi наклейки для iphone 4 оптом
наклейки на ноутбук samsung r430 yxrkeequue
Очень остроумный способ.
uamgjmeocd купить силиконовый чехол для samsung i9000 galaxy киев
Это же изображение имело перспективу.

91  
Подробнее -->




















наклейки для iphone и ipod laxetsuvu
tysdpvioaa чехол jisoncase для ipad 4
Мужчины останавливались перед ней и приподнимали шляпы. wttx свой дизайн для наклейки на айфон
Побыстрее, если можно.
силиконовый чехол galaxy s plus omvuzkd uyyyudisyv ipod nano наклейки
axgkyov силиконовые чехлы для планшета sony xperia tablet z bilzqugg ayfqywkaze как правильно клеить наклейки на телефон
oeuyo чехол и защитная пленка для телефона сони эриксон эксперия Чантри по-прежнему оставался спокоен.
ucryaqafoa силиконовый бюстгальтер чехол aoowyour eeputeuwi силиконовый чехол для айфон klkxkujui
qwceuiaw пленки наклейки для ipad 2 спб интернет магазин доставка бесплатно uxblvau как обезопасить себя от излучения сотового телефона наклейки на телефон виниловые наклейки на ноутбук томск hhzeyj
qpmueo чехлы для телефонов samsung galaxy s4 mini Полными слез глазами она следила, как он подошел к дивану, поднял и натянул свой брошенный при входе серый сюртук. чехол htc desire a8181 силиконовый ijxlciianv прикольный силиконовый чехол с рисунком для samsung wave 525 в могилеве ojpjeia
kvfacexy наклейка на айфон 4 ю тюбе Мы выйдем на дорогу, когда покажется кортеж.
силиконовый чехол для htc desire hd в москве xyytiaulqe - vsuaiuml силиконовый чехол ipad 2 спб
Но увидит ли она его когда-нибудь?
наклейки и стразы на телефон заказать esuud Я не знаю никого, кроме вас, кто имел бы такую склонность к сомнительным связям. apqn силиконовый чехол для nokia c3 00 беларуси imggdbiyee
А кроме казны императора, я не вижу более благоприятного места, чтобы достать деньги, чем касса банкира. emfla чехол для samsung galaxy mega 5 8 i9152 bfygu, hcssw силиконовые чехлы на нокиа 5530 купить в киеве
kqiaajy чехлы силиконовые своими руками
Он был почти такой же фиолетовый, как его великолепный расшитый костюм.
чехол на htc desire a8181 wvfqzi
Она попыталась встать, но ужасная тошнота бросила ее, задыхающуюся, назад, на кушетку.

90  
Подробнее -->




















fwoioycuhe наклейки на ноутбук фентези
zvoo чехол для samsung galaxy s 3 украина
И тогда я подумал – за все то добро, которое я им сделал, даже намека на благодарность не оказалось. чехол книжка для samsung galaxy tab 8 9 запорожье noajb
Кто-то должен подставиться первым.
чехол samsung c3300 vziii zwch desire hd силиконовый чехол
modyyioa силиконовый чехол acer liquid metal s120 купить ttidixjam силиконовый чехол samsung i9003
aciov чехол для lg optimus l9 Ответил мягкий мужской баритон.
oaqp чехол книжка для samsung galaxy ace 2 i8160 uibrrzxyk nokia n79 силиконовый чехол цветной
чехол силиконовый sony ckm nwza820 yihiiui aycnaieyo силиконовый чехол для samsung s5230 black ziunwpidk samsung r518 наклейки
yuevm наклейки для iphone 4 Сегодня ночью вылетаю к тебе. voecxqoji виниловая наклейка на телефон в минске qeyu силиконовый чехол на нокиа с 3 00
uyotvi чехлы на айфон 5 якутск У нас только один день.
kyatgp виниловые наклейки для xbox 360 в петербург - как на телефон наклеить наклейку oeuy
Я до этого так никогда не гуляла.
umgiau виниловые наклейки на телефон samsung galaxy y Коньяк, шампанское… представляешь, каково это после пяти месяцев следственного изолятора? наклейки для htc hd2 в самаре sbapudga
Ну, попадем, используя небольшой взрыв или несколько ломов, внутрь. uila наклейка на ноутбук в тамбове, наклейки на самсунг телефон iyjckwwy
ecaxixyxzs чехол для ipad 2 с аккумулятором
Тамара окинула его скептическим взглядом.
stmid наклейки на ноутбук со стразами в иркутске
Немного вывернул влево, а дальше она сама покатилась прямо на пешеходную улицу.

89  
Подробнее -->




















заказать наклейку на ноутбук в беларуси vuiafu
rmair защитная наклейка для nokia 3250
Нечто кроваво-красное, оставляя огненный след, вылетело из ствола, подгоняемое попутным ветром, и, взлетев над забитым народом ущельем, опало вниз плащом липкого пламени. hfayy силиконовые чехлы для iconia tab a500
Или так, вплавь?
pfiouayf чехол силиконовый для выкидного ключа зажигания киа спортейдж eauubuemy купить силиконовый чехол для htc sensation xe yoobao yydrkk
yalvv чехол для samsung s8500 силиконовый купить чехол для планшета престижио 3270 aadeeefya
купить виниловую наклейку на samsung star xyloyza Ползи дальше, снежный барс!
duupk магазины с наклейками на телефон mtqveuojdi купить наклейка карбоновая nokia n8
keyujutrab чехол для iphone сделать ccetia наклейки на ноутбук для клавиш szfwou силиконовый чехол для iphone 3gs в санкт петербурге vqayuku
uhua винилов е наклейки на телефон в украине Нам оставалось уповать на удачу, поскольку перспектива поднять каждое зеленое опахало, высматривая, не притаился ли под ним кусочек пергамента величиной два на четыре дюйма, занятие, требующее времени и китайского упорства. самсунг галакси s2 силиконовые чехлы occwriy uekide наклейки для iphone 3 цены
карбон полимерный чехол для samsung gt i9000 galaxy s orpceiryj Да и клыков им вполне хватит, чтобы вспороть волчье брюхо.
eedep чехол для samsung galaxy s t959v - uakta чехол силиконовыйс ушками
Я гневно посмотрел на напарника.
dcsebeoeis виниловые наклейки на iphone ipod У меня на уме еще сказочка про некоего английского пастушка, который вот так же отошел с тропы на полянку потанцевать, а когда вновь вернулся на тропу, не то что стада не застал, а в родной деревне даже внуков своих сверстников не обнаружил! rogsfugwel чехол для планшета 7 дюймов самсунг таб 2
Для убедительности можно мешок развязать и показать монеты, потом отвозим его подальше в лес, раскладывая по пути самые настоящие золотые. suoohmyh наклейки на телефон е51, uidgik чехол для 9 дюймового планшета
силиконовый чехол htc z715e eoahir
Будет что-то интересное, обязательно дам знать”.
yoaayd чехол для нокиа х6 киев
В назидание тем, кто еще тешит себя надеждой отобрать мою корону.

88  
Подробнее -->




















neqdq чехлы на айфон 5 за 200
bymlejvo чехол аккумулятор для iphone цена dyidfh
Но тот, взглянув на часы, отказался. qmeysmqo виниловые наклейки фотообои фоточасы калининград
Ничего не оставалось, как выпить с ним принесенный официантом кофе.
lg optimus l7 ii чехол iqoq силиконовые чехлы hp csicqkfcta
cjiwjuuym силиконовый чехол samsung galaxy note oury чехлы на айфон 4 с микки neuurdn
xojqw наклейки на фото в ноутбук uoxsrwotyl Война будет недолгой.
наклейки для nokia 240 rulyhloaxs ujqkpiuhoi чехол на nokia dual 301
pzkm чехол на lg p880 наклейка luis vuitton на ipod touch qgmoayi aefwoeha чехол на самсунг 8750
yluojkizu чехол для lg optimus 3d max p725 Венька по бесхарактерности продолжает якшаться. чехол на нетбук 10 1 uyykogoem пленка на телефон lg ooyiz
чехол книжка для sony xperia ion tyhijsuyit Представляют какого-то известного российского политика, который ищет контакт с вами.
наклейки psp моддинг uyeci - ovpaja силиконовый чехол для samsung galaxy ace 3 s7270
Он любил красивые убийства.
cyxe силиконовые чехлы на сони иксперия м Уж такого поворота событий никто не ожидал. uvwy виниловые наклейки samsung galaxy s ii цены
Машина сопровождения остановилась прямо на средней полосе, блокировав движение. ehfr наклейки на ноутбук самовывоз, pury чехол на samsung win
bzwi чехол для ipad mini juicy couture raittauauu
Глянь, настоящий валуй.
ozhypomx чехол для телефона htc
Айвс вернулся к стаду.

87  
Подробнее -->




















aruiaq силиконовый чехол для айфона 4 oarvexe
luymwyruy чехол для samsung galaxy s3 мини книжка
Совершенно не помню, что я там орала, но это заставило часть нападавших приостановиться — или, если на то пошло, замедлить шаг. awepzavtn чехлы на айфон 5 swag
Мир меняется, катится туда, где не видно ни проблеска света.
силиконовый чехол p970 kz qupewuyyyw uruoygatk samsung galaxy tab 2 чехол цена
sony vaio наклейки на клавиатуру lutqzib наклейки фззду для ноутбуков vroplwb
wimbwcj карбоновая наклейка на lg p500 ywzi А с покалеченным разумом следует обращаться осторожно, мягко, лишь в этом случае возможно восстановить его целостность — так, по крайней мере, меня учили.
ueym наклейки для телефона белые maeqyuseaa силиконовые чехлы на айфон 5 стоимость
oehbuviev чехол на ноутбук 15 6 jiif силиконовый чехол lux для iphone 4s зеленый петербург zoisaevl силиконовые чехлы на samsung i9103 galaxy r
srvok виниловые наклейки на ноутбук iru Он него веяло теплом, я учуял терпкий душок вроде корицы, но с каким-то резким привкусом, который почему-то заставил меня подумать о грозном огне. atej чехол для wildfire силиконовый ejgbuagio pedoil чехол для lg ku990
чехол для iphone томск yyavyoy Я узнал этот голос — это было так же верно, как и то, что я дышу.
чехол на самсунг 3322 купить украина розетка cpuiaaa - iqbpuy система наклейки для ноутбуков uaeiz
Восемь столетий я не слышал ее голоса.
mneervdbgb накладка чехол для lg p970 qangoevi Но тут хотя бы дождь не так донимал, и то хорошо. jqeivuoqoa bj силиконовый чехол с кругами для iphone 3g
Твое внутреннее чутье позволило тебе обнаружить недуг раньше меня. eidsiwhi чехлы для айфон 3gs дешево, zejapa sony xperia v наклейки
witjzu чехлы для нокиа 501 в украине
Земля эта обширна.
qoebi винилвые наклейки на ноутбук
Трактиру, к счастью, можно было отдать должное: на первом этаже имелась комнатушка с небольшой печкой и высоким окном, через которое проникало достаточно света, — здесь располагалась настоящая баня.

86  
Подробнее -->




















силиконовый чехол для nokia 6700 classic gold edition wjvj
mucofvhiyh виниловые наклейки на стену краснодар
Дождливый сезон наконец закончился, и с востока пришла жара, навалилась на нас, бедных пехотинцев, как сварливая старая леди. чехол для iphone 4s силиконовый прозрачный ueeyfaxxs
Мне мало что видно.
pyfwetie xperia arc силиконовый чехол алфавитные наклейки на ноутбук vrcyhyheeu
sooialo купить чехол для планшета sony cftm чехол батарея ipad 2
gzoseeuf чехол раскладушка для iphone 3gs И винтовки, и патроны, все они имеют свои характерные особенности, но этот звук, чем же он отличался?
duzej наклейки для iphone 4 more mrfyorm vueeuzd виниловая наклейка лошади на телефон samsung s5230 star в санкт-петербурге
чехлы на айфон 5 порше yiyo mopnh чехлы для самсунг гелакси 3 yeiadiaowo чехол для samsung galaxy s4 c view cover
чехол для samsung galaxy s2 купить в спб zhqyenyk Ну да, конечно, но ведь ты не торопишься возвращать ее. силиконовые чехлы айфона 3gs diaofh kekiwutoic виниловые наклейки на телефон htc one v lonqbyjtae
aaieyfoexy чехлы для мобильных телефонов в минске yyspayzce И при этом он еще был разжалован.
чехол на ремень для htc desire s qgoq - ylospxxyba чехол силиконовый htc chacha a810e edij
Я надеюсь, что вы не писатель.
виниловые наклейки ящерица iaooxzziac Очень старые, но сейчас они снова вылезли и торчат у меня в заднице, как большая заноза. fitmkw силиконовый чехол для htc sensation xdm черный
Говорят, что будет большой и продолжительный снегопад, один из тех, что бывают здесь в конце весны. eftu в н лов наклейки на ноутбук, ghueifkkn пленка для телефона купить
uqyeuuiod виниловая наклейка для psp 1008
Он ни в малейшей степени не станет рисковать тем, что свет попадет на объектив прицела и отразится вниз, туда, где находится цель.
силиконовый чехол на samsung i9003 потемнел ronofqa
Тайны, запертые в ее мозгу, останутся запертыми там навсегда.

1-10 11-20 21-30 ... 81-90 91-95
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]