From 240847925c39a76077a8f039aed8fecaea477548 Mon Sep 17 00:00:00 2001 From: Barinade Date: Fri, 27 Dec 2024 22:12:52 -0600 Subject: [PATCH 1/6] fix heap corruption caused by etar preallocation optimization --- src/Etterna/Models/Misc/TimingData.cpp | 45 +++++++++++++++++++------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/Etterna/Models/Misc/TimingData.cpp b/src/Etterna/Models/Misc/TimingData.cpp index c32545f83c..b89acc39aa 100644 --- a/src/Etterna/Models/Misc/TimingData.cpp +++ b/src/Etterna/Models/Misc/TimingData.cpp @@ -1451,11 +1451,10 @@ TimingData::BuildAndGetEtar(int lastrow) return ElapsedTimesAtAllRows; } - ElapsedTimesAtAllRows.reserve(lastrow); - std::iota(ElapsedTimesAtAllRows.begin(), ElapsedTimesAtAllRows.end(), 0); + ElapsedTimesAtAllRows.resize(lastrow); // just dont parallelize at all if it probably wont help anyways - if (lastrow < 100000) { + if (lastrow < 50000) { for (auto r = 0; r <= lastrow; ++r) { ElapsedTimesAtAllRows[r] = GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(r)); @@ -1464,17 +1463,39 @@ TimingData::BuildAndGetEtar(int lastrow) } // stupid optimization - auto exec = [this](vectorRange workload, ThreadData* d) { - // so now the iterator also provides indices - for (auto it = workload.first; it != workload.second; it++) { - const auto index = std::lround(*it); - ElapsedTimesAtAllRows[index] = - GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(index)); + const int THREADS = + PREFSMAN->ThreadsToUse <= 0 ? std::thread::hardware_concurrency() + : PREFSMAN->ThreadsToUse < + static_cast(std::thread::hardware_concurrency()) + ? PREFSMAN->ThreadsToUse + : static_cast(std::thread::hardware_concurrency()); + // [start, end) + std::vector> threadRanges{}; + auto rindex = 0; + auto rsize = ElapsedTimesAtAllRows.size() / THREADS; + for (auto i = 0; i < THREADS; i++) { + rindex = i * rsize; + if (i == THREADS) { + threadRanges.emplace_back(rindex, ElapsedTimesAtAllRows.size()); + } else { + threadRanges.emplace_back(rindex, rindex + rsize); + } + } + + auto exec = [this, &threadRanges](int threadIndex) { + auto& range = threadRanges[threadIndex]; + for (auto i = range.first; i < range.second; i++) { + ElapsedTimesAtAllRows[i] = + GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(i + 1)); } }; - parallelExecution(ElapsedTimesAtAllRows, exec); - ElapsedTimesAtAllRows[lastrow] = - GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(lastrow)); + std::vector threadpool; + for (int i = 0; i < THREADS; i++) { + threadpool.emplace_back(std::thread(exec, i)); + } + for (auto& thread : threadpool) { + thread.join(); + } return ElapsedTimesAtAllRows; } From e0fa83313a68a84f1204e6417addec79e3174dc5 Mon Sep 17 00:00:00 2001 From: Barinade Date: Fri, 27 Dec 2024 22:26:11 -0600 Subject: [PATCH 2/6] Iterate version to 0.74.2 --- CMakeLists.txt | 2 +- Data/splash.png | Bin 17845 -> 18257 bytes Themes/_fallback/Graphics/Common splash.png | Bin 17845 -> 18257 bytes src/Etterna/Singletons/GameState.h | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a2349fb792..5994d42091 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") # PROJECT WIDE SETUP project(Etterna - VERSION 0.74.1 + VERSION 0.74.2 HOMEPAGE_URL https://github.com/etternagame/etterna/ LANGUAGES C CXX ASM) diff --git a/Data/splash.png b/Data/splash.png index 73973227a187792ae821616ccdfbc21a54fa0e3b..a5afc43985fbc381e2f19e2cefec46bbe5f6ddfc 100644 GIT binary patch delta 12888 zcmXw9Wk410)4jAH(%mUYBi$g~4bmV;cO$X1(jX}fl1ev9cSwVDHwZ{K_ucF7|K6{= zcc0mbGiT0heH7e8EL=Pt+;S;eT5MQ-No}o>|yV8fk^bMn8vl|OnQ3gjwwlv z{aH{Sbx&6cy;zz0+I2hD?sP*~Ij#A;(AMc|{lNF=*OOZX{j+u=IXJ`Tw?2i}GfuOT z?IvQ1zsSxH59Lk{KOSZd-`{(y(&U`xp!lm;xat589J}{-cLDyblxcUBn7{|w_-!7y zy6YDwDBBmYB`s|yUQ!P3j}6?5Ctrr|HK3=uHAOlZ*6XzeB@4*ABE9)rQ^MnAm6>5< zN;%JSPIB@h(k2H#)8@Ro)=ip+Dr6g~`W2ORqO`SZi7E!nhH2oyV^UP2tX^w~d=cB- zk&S)YxD*I=m94WAXCC4dJik7%Qh^*^&v}s`M%Fg;8R3C=5Fwz4ojIR zJ@n&XNC|L*(Ju7Yc=z*wB)PwtA z>tH4NT^Scs6gRiHAujHjiyzV7c5rfShZP)Tvhltrp#{{rb8y>L6#icL_S;xCivgW{6 zQP+gFtT||m?dNfW$F;~+9bhp})x@KD$ZJm_AikfZsVem0j@ZgL*YljUamABoDWE^g zMB6v@67!^8oySL)RV4W==uVrb;#&X(H5olLI=Hd=*NOeCCrrQRP6g|i`_kv-X} z{FlLH#$>paMEESS8m(vAKfSi$^&Z-%S*?MCl&9GtB=%(|o#QxMhw7$(e{xTYQH;-=dc|#QFH>I{ zQ`LzgmXSOW`e1)yEoW4=8_sJ*ZEF81{VIJJ;uoD+o@SDrA!s93BUf>(z1uR8sy^*{ zjDi_YZGdK{jl1X>y9+%0nvX6SBJu3~Eu&PpjUjn*D*Akn_i5{(ETxc>ZOlkjFR%Oy z3bB*_-Ff1%Uh470Gfn@(MT0~6hk#>I^STk*M7X~9N#&npRDC%z2L9H!HqZpK1ea}9 zON_lOWXsRs`ys1;u9icr$rVE)#haZ7d`x)b#$(1JC|SWyosUukl1(l-0jxZ$ir z>pVWAictMi@0TU>sydH}>yOuX)N1^l<0Ptl<87U!Ndkqd%dg1V<#_DedIeJ6>UrV+ z)j59Wazfj$71~SDV zqAe$@w?~NX^&3e4{CX<+WE>1U4-&~_?`@`xd&+yx5vRayJauRpPH;M@} z^BChSgkCy*5XLC7&RK+vz*K`aC5P~J+F#A{W**IDqZPpS^{^$zoqX-&XE#5Z1kt6K zRVe5X6(WtM5~+>z3H8_892d!jS}`6+GBTG@b-r%~lRuX%s~6!6-s9Vd!-MyW51pH% zKr==rO%29nK=mIt{gxn(mFM#RM3|#&M z`dnZ&-6s!V6oO&8B266A*Uf(Dd4VI|fL0<$O`eB8SG^qKML=!U-D*@+i~i^?ED<8v zg&BxcC-+V}M~_RC6q1Y3HtCjy1c{-+fK$ikSc>H9_T$+{{S$~Wgn2!e%1=b3itqZO zU%F97SLk5x4DRQqdMVcT@@SRp<_jjD+|_Kw*~kmv!Vy<~^SJ!k%Bb0A*AHJ_B2V%N zS**yB54c)v;$EqQ?Z|N^Wmvj@GiF>&#Eu>FWOvB$P$|s{F^c2e(nxpS@Qi)JK2~oit>JlK59fjJ7-5UQ8?K zW(5k0*;MXP_U5UfuzC&l@k*kmxhFd!W2!#3@8*+D(y1}+cJ*bPLx%|)9FY!Tr4i))sfT!Q?r5WRI?>)KT-k@f;Z z9n&epc{uE~ z1j#Q8mBd*(mAe#vN7Qd~?ms7hyYFgBM|sixbLk;e^}2t%$|^tyx1GGZlJMyut*AQ@ zXZdrP+WRJjbz0t>{l#Z1MeAO)-~YY^vfp1z6kF&@*9bJD7k#Y#^s~Sr6C*TJMg}vc z-HeU;7X3o$uhhrl<))AV0##IzEJws&P@dpU6<4*UI%E9SaiWByKO`g2=C?B51gcY% z!J?zLS2PL%ICO-31a&_{ZpG35>SnJv#6D~?Xwy-(I zOEL-Ljv za$TV9czyHGDB8*==icpt87UD?G{GB)-4B;;kr1x6+0VR==q_V<)wA2PiEI>qlWQNNPPkJzhCpc@mjAK0%3a zbggP!cCv&(@J?*B-nze4RuVL?%|H)=r{m+|ws^Gwcr)t2LEosW68?R z^^S*CfK$Md^_`gj4+ozBznQr?Z{i7-Y@#Y5654A%t=F#wU-JlZ*NPC?JVTsTxh_il zM)mp`86q*GxOk3k;uaMTaCzN6_UAs@N_eH8VzB`CGY*f-WIAOE^^3^ue7SP!Nb3@2 zbPP23VJfxYDUDD(Ei`!C_=pWGx<)g_#C&8D;!@TE3^+4fDf}UBq@|{$9^6Fl2!;re zwiC*IuFBMTLSMffKRU%hma+59=4+qh>rCI{W({raWJos$Iu}AKP}R+I2^2Ua(XBDe zmItep(mL!GY@-Q}+Q~0^>-&YxF#qnkBu84^LGR{pks={amUkZDJYf1m!`a5_0nuZ5>w12H8EmnSH%5`Tf_2V+Fq|UO7<qseN2VtkVULc3@)BCW?%DjZH7aw^`zb#S2LUOb({$rU(Emmr~`>tSsV zyrOa1EC`?}J^6PwDjMVt!MsiRc|_AdGb3Amhn8F$t0G$B_stIYKru z4MH*&F5_@s`>kp$EdzbO`f2$X$EmumF5!chmlq%L&rB5topOEY$%X+r4oiuf_MUXf zl|IgGMlH03?uFhCqM_%^8dK-rzkSotVJj^!e*ykDfv532NpD~yf*}}lCQHccrQh*> zf8@2GWvzLCtN>>F%F0SpZ1soB1A)rNbxa^|7(ZaSX!WFjHwTE_?2j{FZSz+js|KI} z-og}1UaS5$Yay5$wqHjw___}-`|MRg!^kjD4h|33&u=+${QC|sH@Y#!dcIe-k(@3G zc^zkR@-w)V0rT8EJZ9bDFQ^wQi;Gd%+iu<&wp-DC@bz`s=t1S?(?_CW}C72Ti%{+Tie_BEY#aozaLJiLTFq(3I`pTKr7ot z0oaYC^Kg>e{m@-nS;2_wN2r{QijBqad%T?OyaofNW?~Z8>U+Jh{*f}anLNMVrYV38 zu(Y;*cG7xntknPKmnr2E#YRcyR|XpWqPH9E&NR z_==oKcazWpmzE5@TUSE0{0mO%>*|19&>QX0#}jiBzaKw;b_Z0{)^hFP_bRxY&Un-s z85yBs2F%RNKmy}L?-&nGrdC#B)6+@n>g&TE|F~n0Z=U8>RInA zIGpVsx16hx33=MftjceT48v2k;?1*wAebDUr@b$?=m4^Y z-Um)_ z8Mi*#nVXyIFUVazd7Z4p$mxjE$-|s4zg&meQ zyxj%nJDKa>)YDtPxi){Hix2*WU9a)9wY4D}-ME-D$KVs?fh?>3SaRoP!@a$|X972> zjYrA4#zDrFae}R%D|~sgtWCp_WzIs(r3uQSW=Y(^SHrW))hS|2;Cc@)9>6GzX7n;r zc(35y@%-j#539z|aAkP%XVeoJ->R{lrDiwmb0iDZzk3s3J3Cnx5Cm6vLEGl)Y;aqQ z*}-VL++6@RNhw9g5;!N9FfWFurN`ReudSKd^G!lU`9$^|8vdSo3-i10sVN;DUw!~< zGQw1dA#%bxn%{ZoC|jvb!pMl+*47rR9CFQy2$q0~pT|Ftnyu#VRVQU=P1UDjAxaUi zlD3l)oD^fE6DKzdl^_F{+nU8Hg-d%C@H_@y56eiqQl?&M{6f1)x{7d?Q53jfm^TYCgYr=6=*r^Y@#xO zz-PHNO*Do5N?#!HA~^{O2}z{c-%7)zx{D*EUUZ4fnP0YuP+&ft#sN~7RiN8ijGdI! z1HJRHRElvgFE7F9qec?=IJd5clM)n+vFOzxitm-C$(@9~0}C583Qa&xTUQsfzo+%g zyrD`SQ6P@mD7$`Yzh@|!d14lrC7k8-{4*C+oD=Y2~W#E zkom$7A%wU79ozeM{T1i|PO;!RL$c=ch)`AB7?PfQ)127MN6J?j{tX}T6+wUT+B!Oh z8&_gdc>S2w)6;9F^55wrb?O-(R~v};6Q1HG<#P-j-bTxi25TOm>;Pu=lW$+@Q%Kfi zUn=u0Bd$SJi+dEnuJUVFdDq?4wiURugL>!(85*(q2r0T6ZaIXi7d*tj!iA_5b6H~Y zVLLJ5n{7yS6_+afh~$w_HXaVx8_)ZMuxXDu3?e?*V*Yvy&o#N2YdCN(-{(AyU*Gz{ z(6r|L@J{PkT_ey4x@PUDaTVjXt<&@q|9hIL>FLmvl$1}zfAI0~m6+pD3LNsPDdgV<&6UKK^vR3i|0KXF}u?4>=h5rH)sP_h8_^u2?NEFH`H% z0Rsu2-ABiY-2^$b8S}!8$5)B^9lo-=hI&S}#DoNKHI2F(4aH@=hRdBjG-pb}wS(8^ zI7kpbGvr4{mR!OV6|lupbouIRocv%~Sy~#w?|t_e0K>+O&$as$zyGXG?w+p?B+y!0 zTZ?OIPGzE>yv@g2Zvnorw?E+U@bGW~v*e$CTcIN(EG#VSw4|n{68;MN#GN}hi*CqT zhgbgEh-GGX<4eUCm6~;*c_GYHXQoD9RaMpL8I1MM)S3z7f;rdr3l-{HlJH05o7}cR zZzQR2J2}OkOO1veE9l2&;J{J&8o~OgkIk6(=iU5u*JfuBL_%ABSp4}+`DYzaxB}f- z_O=>c46Lzgheh5c=k6ES-yt#zJBeQ*8N3eZ)R1>ZF9`?lbB+auX7Cb^xR67r-#NfF z-)IyBX&Vm_vboaCHdR(u%1TNi{4UeOZ9vPN+7AUw;HMxJ4#r1X>UEAq(DHt&#(S{k z;yfK~e*CYE);wS_m;3-4b(Ng9r)yl~d2Vd5W&WdEP(J`9gshow#l=8&2#OO|^4leR@`(VuOuqY2#Yko#di&XGg|HR|N zMsivalyf{o|1V6u;yj9xg0;cR}q&8=CO^_fDYbauJHe$)T7<9D3Am)u`38gy!l%+MC_^Q-uH5I1L zPc0$;VO)(VNJA6#wsXQPuf1zM-;%|lUqv2~3P1Vm4Yrdc^C9d4fR8go%S2*2?BxCUV1}21DQ6~^UVDy zokA%{0dqCu#DOEVHUJ+XU;1`5$$E}Qqkx70)6SDkypA#S&!gDW&89kvMzhi}hLr@Z&^qIh>u?w7nYWy!^6W%49*SHasR$;*IvIe z>-LDPE1Y)gB)Z{B{8DPaar)@F@Q|ekAK6XKO=)9qpeNUTR1yy zNI+Lt_bbTmK#1a$RnhPnD?(^>7Dwe_{Hg|V|nwQ=E6B8P?At7_vLS{!zuD*2KH;!^6(7etr8&&fTg*>*|YCu?@{* z0LT+LkN)Ty8O4}D?`9!^CXWZY)F|?|!U?>nwoXnT`!_pbY!{=hRH4rQsD2g#!4$br z(^_nB02YzkS1CQE<$i#@FaE_kl&lsp=8fb+AF5LBlCeq~tAnS3eq7E49;_b0U(wN< zj~_pp2k`eK3KMGIGQ_9R`36=yhLG51^JOE}&+lS*w4S~kYkj&qY`R|Y?UtdoIDvv) z$mLPgxRP&OszXa#7ZFGGI7xD5y+_x<0bm7-czk|7BGveVjZDs^w{X+tZv%A`6HJKr z&HBggtNr6+M{Zu;{JcCkkgs`P&gh1;pZ}qeO-M-}I-)p~QF?rQq?X=Aq4Wy`dHWK` zQs>$Mv25V!wxpq#)>zYLtOg<%jbnh}L)u@UUV>LgEAUhrRl=xng417s6bL+sN9t@@ z-gSVGCpVM64I<4J9Gkui@fWr8mQ%VCWlFqmR?Vo{?uAAtN|0eAe(c6RBcbrWP``P6 zYU-W^PX`+;b}Dm`AQMicccRey^}2w^yHB^zg*^Xs5SsV}37xdyvbX&0TFRI@ku@=) z^gLc7*5;FSFQ8gyYnzbljQf8H{O2x_D#X|BV1fR?#13ae@MTe>GaG@*rmnB zWs&({4+aC-JNoIH^>ptDDi|`pZ3lZ>f6Y zR%FXF=2FPR!-MP1jlaJ?s`B%}pFBhAc_3q4U-nv!+2@O26rl(r81}Dq+3X{3CW}}| zIq>Br-%?=>GcuI?FkY1&WKeM{Hpz>O75IG`sWtsd6lIqsp9eI9!B}00=3O)VFE|#vT_@%w&hGq=0})-p+^PTJBida z{Ytq`)XBl3|J;TYfhI6=Bhp8J5N3+CFQ7Rt!C=32fSTQBTsg2mF}IXGy${P9^Pff`&WjF>>ua4M`~eUAu&mHE_MzXf?W}a|gCdTq>u{wJp6lWlsVKdg3$D989oDZ$M1I=@rJ=j%LrU+o9yE0rw6IW3}%4 z8p3ybU;ln+oofMnxB{Neb2dR)pldTuEOuyUyih6!c=9PTZWY`zk(HJ0c_#{{a^Spu z><1&TZwl$_>pTCM;{Y^72w1`;$WnB6bU=>V?vI<|uD?<~K9h|lL%q#zkz8ASx@s)xpKtNuTJbwq7C!&Q z#qV)|cXxLeOk*la!y)b&3O%Oq1472g|;&*gHIHm3u!tZ6_Ru;0n7Bm z!!0ldWOD@?1CN&+MCdnvyD_co=V()3G`wYb+a4f-jDiyK6Hx_f3;<$3e*Ca}7FASK zWV-yQwu^S11CBC>ivTJGO797?|>AoK7mT zhxtJ}Q7C&Tp*ONb=;5FGtLN?cYo3Vm?1pQ|$KI|OGSX5EUO_3n=$mGzB{=Ab#&U^4BD zWQ0@>f+|2B$aNG`SR@P#44nTu+1X{Bwt~|>;!n?`bWW!>$K@Zyz;5c;<;9fh*iCGU zN$5jXxj|!oRTb9A$cVLrgS4@+anFlVdtTC~+c99&r?tJElGng*c-8Ue5pN3!@6@Yy z4h~2V;p-(g^*FcnE+j2o-Ays*?O5h@ri#_C3_ki0b^g4-&+aC=Oh^jK7hId<1b04U z<_8l#Vhmsb(wzV;=NJ|3Pj|$X4q%rDTP0VEZ}C*b@87@I?9MQvYbB>ug-?5;t-H>) zhff#mDv?ZtK>i1lr$8r%w`BkLA!z7(R1X^a;==<923f~pWqa)XNjuPIg#rd|78Jj# z+;&Glq59j_lhD%Ax*1cFlZWY(-=~y**R7QC0el3m{>*djw$dx6n1V8x_tm^rqHQXy zPU-3C_YMved?^RQ4*-lPG=&IHs_UAjXpM{vKZ6~?U9r#I@PX8WK?o>SU`6p4FKZqC zF7K{3?+=DnmX~L7kwYLL@y@K4Tp3Jc*!8pY^Yc^j_6OAlGs(;P`g-sCqsHA9pv`Gj zG$|!zv}v@htxW*?MXTt;sMTjW`im8N5>nEM#lP{w=;O7^!_8^vVnJ>$ z1XJ{eYQ=l=#RFK`%5IqProZ6f)@tTKnp)BFEKJI`gycnZE=#-p%Gj^~1YHk?9g9xw zB1Gw9V9J3;2cP_0c4Pqz8thd{D8%K=ILLhjbASFMZEbD6*-BKkB=hBUY$TP9qj+(< zvOiT^Z9DTVv~eB(O(^+Z*e8eDF;GhKJMmrZ_P<`{+iev(ZbCppLZV)c!f!Q>v&!)& z$nn1-_B>h1x@zEiCX|%hY7kPU#~X^m1DclMU>adOSz7c(YuO~z)@77fzakzuFLFXo{F z1gQFjDL`FJVw#k+3es&u-CX%|SL1AW(}6RvOd$|(%KTknBxJSH+}vGjpIQ)M^0 zrxoNQbqx(0wPT`^ZfiUOo2~M)ieu%!CRxE{g14o}IZGHaSxtT*t`J zIyS8%lL>n}kNSEodl3Hd6bd+vGWo@b<9-N~H+F#{USlI+`{R)lEd`XX{q}{ctLr$( zFvU#+BAYEjAdC%@tE;A3BtiP6FCD%DLvfM$Vb}to-zFa}D}mnM>+9 z(KG<1qQb*VMt;Bt)ba8IECoS@Rm$K0G4lkZxVgo}46jIAjoCrbXs5;42rweoYz+Z- zA}G6KIsG|L7sc_O;YtWPZAl5u_C4| zZ~JJ2^E+*jS>c!xb-^$VRKuPL<@$mn)XYq$#q0IyQcbSUw_6^MdBXeqt3qx&=oplu z!kc8ERNHCu>Fp@~zW(9C0gVc7nbA)I5FIgxhAJ#^FwxOXuaB2+hE1Mu9+YHdQR?&o z*5eD}eF)>Y>u|lBSOsVVr1Z#X=?f1*3N1XCSytg z2(ELjdI&_a^`;jjOB)>3V7i8dqCcDDMTuebS^($W%4j(=EDWw{uIxB!Um;8#%>K2tNYx6%6_PLkwj2aur zEY*hZmAN~I`sh))ve`TmyO6^!>s?q#-iXb9d)dxfK^cH&us;SR+#&qmQVtc3C=B?w zelk4cHP*PL##Y@D7Q1DQB=7y-qp330uvULd$O|eIt^DTnt`i){VGoUvPGu(`T z>!k!RI%lT+h8`S+b)Avk3pn06e8~_P{Pyqc9yvW~h(g(g$YxX|CnG(*4QW68SLfZ- zf6Fm>g4Tf`oH}5*Paa3jEDzidWc=E4c+lZQlpo3@LxFjnMZbpne$_H1S9_8Tf`1 zS)M^j-Qhi1k1nC`@P(dtie$-szgV1p{m*o{pb_zvK0uulK7;LJU5sYh8y^=-HWv$6 z$T!Z4a>I)AY${O<=5!uf4M3i3@;NK7q29_}j-AN@g(T$V$OaKfFIm!zBlM+AM+f>;-=N1&}p= zG3iZ!nHL2?m5~69{HkNxtb~im!Zh*<95$!H4I|U*CqX^X^@*o@VK11h-z#bfCch8kcRp3 zD5f8ecKn;Q6U151Q0Bcl{lC%8Vgik8n&We0ZI^=BLnYVv>Z6tO0s8b%Z^8g9FVcQp zJxQ$I^O3^UE+{SZz2Xde4MWr4-}Ja=hyGnBfPh<7_PPn!2B4e6#u{LNAotKQ5y;=< zzz!#lA^Bh(mfVuHt#eloO%}xWAss_(3zD#dc^AEV1#rI*g!}kgVnv1J(kcQ1LE@2@ zlF&-c3J8-NtZNz~g_YJzb56@32xAp7Y%;^1yR4Ir#e(0Kc7*w#V=zAy8QF}%sdy3G zXg@2b0-QGIJBZ)L@cwtz_rJUXg;aP+0y+Wx{gX|O()OCYihr&lmgoHi%9V9njlHd( zq8K@*2qE-HQS1r-@`m`vRHKv8b#PJ7as))O&;vBkcICTxt6`JSYhp03!p*Q$k4fl#$-qbc!ES93;Xvm?H3_%&>hX`ub@t-i)n zb<*v9>@(6^BfbYeDt>3MWI=>sC|>I3a{RxzzF~LG3rw$zK?@69RBGpl9kB-uLE66U zUBtX~0WElGhI6~+P-lRr#?1Y1r|rB8Gz~VskEQ)LEi2g~LLP6S@9bb&NzzxfSJtww zeF%i=>Tf&$t9kb>WPIxrVsXZBo(xWfD_=Op6bK?n4IR1qf{p@L5oxM(cV#u^jlNBIxXEaD-#Vo(!%uEa(cEs}5*X`#=68@M85imHSy?a>oiNYZkH zBK}2x9;)9O3rg@C=-l6Wv;NC2^wXz(2I!aQKy3$l*tGv8E8vte#^;oQ{~w|wbqK3l z7v>Q01)HVS6MzbY6eO8G`9CO^Mk03)4wxWnOb$2#z&XFl_2u6e=nK67`wk4Rx>umW zxl?HT9v8#Vl&$eGmq7J+j*$P#VJ8SaBfBN$D^XClxWU#l@cW4Tg#R3lBn=MXT@ov! zubKT5xC+03Uq6_xvA8P1hHx;|-r?QGi~IKT*X!pF$h8lsOAvg@Wd1R1VGn!RU%{V2 zwM`iK9^NuQOt{HdGp_2&!j@}J3#&5%bW{bRu>Zb{xXZ4-d+kH|5q?)KUQ)IS_NJDd z9B2%5jPi>mTJVKMIA;#~RpVouO(hic?=k=VJ=z|W)%BCr6zZf$-@Bj|^4`rrGgb5_ znEqkVGaNdiTGMmN)Z{iRK)8a$WO{LfhH91c?8XN*hvoRA&Q)!N$TF z3wozbpWenT903@{)KbB6)iEJg-CAyuKSDlfaTvU5L_&3|3T9pqm`8tsYSxdS*CMh1 zX>OaEnk<^Pk2C@<*Cza;7f zxRF7@XiOz5NJe@}1@`t;*E#Q^kvod26B^XTbEg57_M5mNrN&RVFvq=x6r{Z&ee7w% zj_&wY*!mdMhjwxhSZ8oSV{mOLduVjINI}HbyTE06}GZg zs4&MD7q{P=xL`bzp_n}zCvbU?dq-s1#$hFKBeweOeY_!GeBeL#EE|jywmj6%%sJ=$;{)O-|LDi8fdAIzycHegf@iP?(i{Q{2^t2m6!7aKJ{&wSU%>TY`9(2*MajNz-zsvr fnnf`?{U?hvIL1nKVXl#r4JN$JktS)T9vdH3J5 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 CMY=)& diff --git a/Themes/_fallback/Graphics/Common splash.png b/Themes/_fallback/Graphics/Common splash.png index 73973227a187792ae821616ccdfbc21a54fa0e3b..a5afc43985fbc381e2f19e2cefec46bbe5f6ddfc 100644 GIT binary patch delta 12888 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 fnnf`?{U?hvIL1nKVXl#r4JN$JktS)T9vdH3J5 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 CMY=)& diff --git a/src/Etterna/Singletons/GameState.h b/src/Etterna/Singletons/GameState.h index 91f90e857e..cb0a7b0ad5 100644 --- a/src/Etterna/Singletons/GameState.h +++ b/src/Etterna/Singletons/GameState.h @@ -204,7 +204,7 @@ class GameState bool m_bLoadingNextSong; [[nodiscard]] auto GetLoadingCourseSongIndex() const -> int; - static auto GetEtternaVersion() -> std::string { return "0.74.1"; } + static auto GetEtternaVersion() -> std::string { return "0.74.2"; } /* is this the best place for this? it's not exactly a pref, and we * shouldn't be copying and pasting these values everywhere as needed j1-j4 From 25ad0f11de6d58d7422feb73103277eb49de40c8 Mon Sep 17 00:00:00 2001 From: Barinade Date: Fri, 27 Dec 2024 22:26:21 -0600 Subject: [PATCH 3/6] Update changelog for 0.74.2 --- .changelog/Release_0-74-2.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changelog/Release_0-74-2.md diff --git a/.changelog/Release_0-74-2.md b/.changelog/Release_0-74-2.md new file mode 100644 index 0000000000..3ae3e21aa7 --- /dev/null +++ b/.changelog/Release_0-74-2.md @@ -0,0 +1,7 @@ +# Release Changelog + + +## [0.74.2] - 2024-12-27 - Hotfix + +### Fixed +- Crashing due to heap corruption while starting a song - [2408479](../../../commit/240847925c39a76077a8f039aed8fecaea477548) \ No newline at end of file From f07029b808a572c44e5d1cf6bcc009e490da6087 Mon Sep 17 00:00:00 2001 From: Barinade Date: Fri, 27 Dec 2024 22:40:15 -0600 Subject: [PATCH 4/6] stop adding 1 here --- src/Etterna/Models/Misc/TimingData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Etterna/Models/Misc/TimingData.cpp b/src/Etterna/Models/Misc/TimingData.cpp index b89acc39aa..298fb4ec6c 100644 --- a/src/Etterna/Models/Misc/TimingData.cpp +++ b/src/Etterna/Models/Misc/TimingData.cpp @@ -1486,7 +1486,7 @@ TimingData::BuildAndGetEtar(int lastrow) auto& range = threadRanges[threadIndex]; for (auto i = range.first; i < range.second; i++) { ElapsedTimesAtAllRows[i] = - GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(i + 1)); + GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(i)); } }; std::vector threadpool; From 209b88a273e192bbe217f80219188e6cf82ff16b Mon Sep 17 00:00:00 2001 From: Barinade Date: Fri, 27 Dec 2024 22:48:55 -0600 Subject: [PATCH 5/6] continuous second guessing and validation --- src/Etterna/Models/Misc/TimingData.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Etterna/Models/Misc/TimingData.cpp b/src/Etterna/Models/Misc/TimingData.cpp index 298fb4ec6c..94613c69ec 100644 --- a/src/Etterna/Models/Misc/TimingData.cpp +++ b/src/Etterna/Models/Misc/TimingData.cpp @@ -1451,11 +1451,15 @@ TimingData::BuildAndGetEtar(int lastrow) return ElapsedTimesAtAllRows; } - ElapsedTimesAtAllRows.resize(lastrow); + const auto maxIndex = lastrow + 1; + + // there is 1 extra because this would + // mean that etar[lastrow] = the time at the last row + ElapsedTimesAtAllRows.resize(maxIndex); // just dont parallelize at all if it probably wont help anyways - if (lastrow < 50000) { - for (auto r = 0; r <= lastrow; ++r) { + if (maxIndex < 50000) { + for (auto r = 0; r < maxIndex; ++r) { ElapsedTimesAtAllRows[r] = GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(r)); } @@ -1484,6 +1488,9 @@ TimingData::BuildAndGetEtar(int lastrow) auto exec = [this, &threadRanges](int threadIndex) { auto& range = threadRanges[threadIndex]; + // the exclusive upper bound + // means that the final index etar.size() is skipped + // (because if it wasnt, that is out of bounds) for (auto i = range.first; i < range.second; i++) { ElapsedTimesAtAllRows[i] = GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(i)); From 44a8430a01a2fa339413899839f79cc6f8b7ee0d Mon Sep 17 00:00:00 2001 From: Barinade Date: Fri, 27 Dec 2024 22:54:49 -0600 Subject: [PATCH 6/6] Update changelog for 0.74.2 --- .changelog/Release_0-74-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changelog/Release_0-74-2.md b/.changelog/Release_0-74-2.md index 3ae3e21aa7..dc3477ad72 100644 --- a/.changelog/Release_0-74-2.md +++ b/.changelog/Release_0-74-2.md @@ -4,4 +4,4 @@ ## [0.74.2] - 2024-12-27 - Hotfix ### Fixed -- Crashing due to heap corruption while starting a song - [2408479](../../../commit/240847925c39a76077a8f039aed8fecaea477548) \ No newline at end of file +- Crashing due to heap corruption while starting a song - [2408479](../../../commit/240847925c39a76077a8f039aed8fecaea477548) [f07029b](../../../commit/f07029b808a572c44e5d1cf6bcc009e490da6087) [209b88a](../../../commit/209b88a273e192bbe217f80219188e6cf82ff16b) \ No newline at end of file