Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

 

σε ένα project χρησιμοποιώ μια Link.png Site: open source βιβλιοθήκη γραμμένη σε C, στην οποία κάνω και εγώ contribute.

Η βιβλιοθήκη γίνεται cross compile από Linux για Windows (ή σε Windows με Cygwin) και παράγει ένα dll.

Εγώ τη χρησιμοποιώ σε ένα project σε windows και ειδικότερα C# .net και ως εκ τούτου με P/Invoke.

 

Πρόσφατα, από μια έκδοση και μετά, μια κλήση σε μια συνάρτηση της βιβλιοθήκης άρχισε να πετάει access violation σφάλματα. Αυτό όμως δε συμβαίνει πάντα και ούτε έχω καταφέρει μέχρι στιγμής να βρω ένα συγκεκριμένο τρόπο να το αναπαράγω. Έχω καταλήξει πως οφείλεται σε κώδικα της βιβλιοθήκης ο οποίος είναι μάλλον thread unsafe.

 

Στο θέμα τώρα, εδώ που μου σκάει είναι ως εξής ο κώδικας:

 

>
int[] buffer = new int[readWidth * readHeight];
IntPtr pBuffer = Marshal.AllocHGlobal(readWidth * readHeight * 4);
OpenSlideInterop.openslide_read_region(m_handle, pBuffer, x, y, bestLayer, readWidth, readHeight);
Marshal.Copy(pBuffer, buffer, 0, buffer.Length);
Marshal.FreeHGlobal(pBuffer);

 

Η συνάρτηση που προκαλεί το πρόβλημα είναι η openslide_read_region και το σφάλμα του .Net είναι το κλασσικό: "attempted to read or write protected memory"

 

Αν όλο αυτό το βάλω μέσα σε lock { } ώστε να γίνονται σειριακά τα calls, όλα καλά. Βέβαια αυτό δεν είναι επιθυμητό και ούτε ήταν απαραίτητο ως πρόσφατα.

 

Το ερώτημά μου είναι:

Υπάρχει κάποιος τρόπος να δω σε ποια συνάρτηση μέσα στο DLL γίνεται το access violation μέσα από το exception που βλέπω στη C# ή οποιαδήποτε πληροφορία που θα βοηθούσε;

Θα ήταν ευκολότερο αν έγραφα ένα mock up του κώδικα σε C ώστε να προσπαθήσω να αναπαράγω το σφάλμα εκεί;

Βγάζουν πουθενά τα windows core dump files;

Ξέρει κανείς αν κατά το cross-compilation ενεργοποιήσω debug symbols (τα οποία μπαίνουν μέσα στα dll) θα είναι αυτά αξιοποιήσιμα σε windows;

Δημοσ.

Αν το κανεις compile με vs ( το api) σιγουρα θα σε πεταξει στη γραμμη που σκαει.

 

Τωρα που βλεπω το link, και γενικοτερα την συναρτηση που λες εχει ενα set_error if somthin mpla mpla και εχει ως μια απο τις δυο παραμετρους το αντικειμενο slider, ε δεν νομιζω οτι τα set φημιζονται για το thread safty

 

https://github.com/openslide/openslide/blob/master/src/openslide.c 631

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...