MapViewOfFile引起的問題。。。 續)

2022-07-27 23:09:16 字數 1096 閱讀 5053

前一遍說到了為什麼訪問記憶體會越界,以及我們是如何找到根本原因的。

查閱了msdn一下。如果在呼叫mapviewoffile()的時候,dwnumberofbytestomap如果大於檔案的size,那麼該call就會失敗,並且error code是access denied。

這個解釋貌似和我們發生的很貼切。因為第一次size太大了,第一次就會失敗。但是如果第二次我們指明map到檔案末尾,那麼就會成功。

但是,我們審閱了我們的**後,覺得不會發生這樣的情況。size是根據檔案資訊讀出來的,因而不會有錯。

那會是什麼引起的了?

會不會是message reader這邊用錯了handle了?

看一下handle的information。

0:000> !handle 0x00000cb0  f

handle 00000cb0

type             section

attributes       0

grantedaccess    0x4:

none

mapread

handlecount      2

pointercount     4

name             \basenamedobjects\3835699d-d3ce-4847-bfca-a50791df408d_log_filemap10

最後的數字,10,是writer新取的instance number。這個數字很蹊蹺,因為應該不會這麼大。

看一下實際上應該是多少。

我們看到,writer那邊的instance number才是2。而reader那邊居然用的是10。這才是導致mapviewoffile失敗的真正原因。

又重新看了遍code。發現**那邊有check number change scenario。但是,**是這麼寫的:

if<

//remap the mmf

}

這個地方用的是比較大小來決定需不需要重新mapviewoffile。這個才是真真正正的root cause! 應該用「!=」來判斷!

把這個地方改為"!="後,這個問題再也沒有重現過。

引起的故障

linux 中的!可以快速執行history中的歷史命令,很多時候確實是很便利。昨天因為!引起了一次線上環境的關機,因此我們禁止使用!history 1001 22 30 00 2016 12 30 shutdown h now 1002 00 01 25 2017 01 12 su mysql 如...

syslog可能引起得問題 引起脹氣的原因有哪些?

肚子裡有脹氣,在日常生活中,並不不少見。總是感覺肚子脹脹的,坐也不是,站也不是,就覺得很難受,偶爾發生,對生活和身體都沒什麼太大影響。若是經常發生脹氣,可不能大意,問題也許並不簡單,需要早點了解原因,也能趁早改善問題。到底引起脹氣的原因有哪些?下面就來好好帶你了解一下。引起脹氣的原因究竟是什麼?脹氣...

spring hibernate引起的延遲載入

在hibernate中,延遲載入是1個非常大的優點,但有時候卻給我們帶來一些小麻煩,在後台查詢結束 後,session已經關閉,但在前台顯示的時候,如果存在關聯關係就會產生延遲載入異常。解決辦法是客戶端每次請求就分配1個session,將請求結果返回給客戶端,並完成展現後關閉session 實現這個...