我想通過使用malloc和自由鉤來監視應用程序中malloc和free的使用。使用glibc malloc掛鉤以線程安全的方式
這裏的文檔http://www.gnu.org/s/libc/manual/html_node/Hooks-for-Malloc.html
從示例頁面,你可以看到my_malloc_hook
瞬時切換的malloc重新調用malloc的前摘機(或在鏈中前鉤)。
當監視多線程應用程序時,這是一個問題(請參閱問題的結尾處的解釋)。
我在互聯網上找到的使用malloc掛鉤的其他例子也有同樣的問題。
有沒有辦法重寫這個函數在多線程應用程序中正常工作?
例如,是否有malloc掛鉤可以調用的內部libc函數來完成分配,而無需停用我的掛鉤。
由於公司法律政策,我無法看看libc源代碼,所以答案可能很明顯。
我的設計規範說我不能用一個不同的malloc設計替換malloc。
我可以假設沒有其他鉤子在場。
UPDATE
由於在維修中的malloc malloc的掛鉤暫時刪除,另一個線程可以調用malloc,並沒有得到鉤。
有人建議malloc有一個大的鎖,可以防止這種情況發生,但它沒有記錄,而且我有效地遞歸調用malloc的事實表明任何鎖必須在掛鉤之後存在,或者是快活的聰明:
caller ->
malloc ->
malloc-hook (disables hook) ->
malloc -> # possible hazard starts here
malloc_internals
malloc <-
malloc-hook (enables hook) <-
malloc
caller
如果我們其中一個人查看libc源代碼並根據它給出信息,您將合法地處於相同的位置。 – 2010-01-07 14:48:28
爲什麼你不看* libc源代碼? – Will 2010-01-07 14:55:01
因爲我可能會用GPL代碼污染我們的專有代碼。簡單地被告知一個特定的功能會做我想做的事情,但沒有這個問題。 – 2010-01-07 15:13:15